【问题标题】:Sort an array with recursion使用递归对数组进行排序
【发布时间】:2011-11-02 04:21:13
【问题描述】:

首先这是一个家庭作业,我只是在寻找一些关于使用递归的建议。

我有一个大小为 n 的伪随机整数数组。我需要从最低到最高对数组进行排序。下面是我创建的递归排序函数,但我知道我缺少一块但我不确定是什么。

template <typename T>
void sort_array_recur(T* random_array,T n)
{
//stop case
    if(n = 1 )
    {
        if(random_array[n] < random_array[ n + 1 ])
        {
            T temp = random_array[n + 1];
            random_array[n] == random_array[n + 1];
            random_array[n + 1] == temp;
        }

    }
    else
    {
        sort_array_recur(random_array, (n - 1));

    }



}

我认为我缺少的是某种也需要递归调用的插入函数。我也四处寻找,我的情况似乎没有什么特别的(或者至少我无法理解它)。提前感谢您的宝贵时间。

编辑:

我想我忘了提到规范说“对 n 元素数组的前 n-1 个元素进行排序。然后将第 n 个元素放在 n-1 个排序元素中的适当位置”。我想我不明白如何对数组的前 n-1 个元素进行排序?

【问题讨论】:

  • 试试看here。这是合并排序的一个例子,它是最快的 (nlogn) 算法之一。
  • 您的意思是在多个地方使用赋值运算符 (=) 而不是比较运算符 (==)?
  • 啊,是的,我的意思是赋值运算符,我以为我把它改了。
  • Quicksort (en.wikipedia.org/wiki/Quicksort) 是另一种用于教授递归函数的经典算法。它也是 NlogN。
  • @EmileCormier 快速排序看起来不错,但是规范说我必须“对 n 元素数组的前 n-1 个元素进行排序。然后将第 n 个元素放在 n 中的适当位置-1 排序的元素。”我仍然无法思考如何通过递归来做到这一点。

标签: c++ arrays sorting recursion


【解决方案1】:

您被要求使用递归。您的问题对大小为 n 的数组进行排序。第一步是对该数组的 n-1 个元素进行排序。

考虑 m = n-1。您可以将您的问题应用于大小为 m 的数组吗?即对前 m-1 个元素进行排序,然后将第 m 个元素放在正确的位置?

考虑 k = m-1。你可以对大小为 k 的数组做同样的事情吗?

您知道如何使用递归解决这个问题吗?

还要考虑如何结束递归;你将如何处理大小为 1 的数组?

【讨论】:

  • 我很确定我明白你在说什么,你不断地把问题分解,直到停止。但是我怎么知道random_array[0] 中的元素小于random_array[1]random_array[2]?这就是我在递归思考时似乎遇到障碍的地方
  • @Nic:假设您已经编写了递归排序函数:mySort(ary)。您将如何使用它对 n 元素数组进行排序?在第一个任务中,您将如何使用它对前 (n-1) 个数组元素进行排序?在第二个任务中,您将如何使用它对前 (n-2) 个数组元素进行排序?起泡、冲洗、重复。
  • @rossum 如果我将mySort(ary) 用于n 元素数组,我会让它找到最小值并将其放在ary[0] 然后在数组中搜索下一个最小值并将其放入ary[1]。所以对于一个 n-1 元素数组我会做同样的事情但是在排序之后我会将 n 元素放在它的正确位置?如果我将 n 元素从排序函数中取出,我怎么知道它确实在正确的位置?
  • @Nic 如果您有 mySort(ary) 那么您可以使用它对原始数组的子数组进行排序。只需先正确设置参数即可。
最近更新 更多