【问题标题】:Sorting Recursively in C++ (learning purposes)在 C++ 中递归排序(学习目的)
【发布时间】:2015-05-29 12:14:39
【问题描述】:

我正在尝试对数组进行递归排序,方法是将元素按小于 9 的元素和不小于 9 的元素分开。我应该做出哪些改变?

(递归调用 rb(a, size); 给我一个糟糕的访问错误。)

void rb(int a[], int size)
{
    for(int i=0; i < size - 1; i++)
    {
        if(a[i] > 9){
           int tmp = a[i];
           a[i]=a[i+1];
           a[i+1]=tmp;
           rb(a, size);
        }
    }
}

【问题讨论】:

  • 如果arr[0] == arr[arr.size() - 1]arr[0] &lt; 9 将导致无限循环。对于尺寸问题:只需使用 std::vector&lt;int&gt; 就可以了。
  • C++ 中的“原始”数组不是类,因此没有方法或成员。如果必须使用原始数组,则应将容量作为参数传递(C 样式编码)。否则使用标准 C++ 容器(std:arraystd::vectorstd::list 等)。
  • 好的,我想我修复了无限循环......但它仍然不起作用
  • @JCoder 不,没有稍微固定。 (您可能会交换两个相同的元素,然后使用相同的参数递归到排序函数中)。
  • "arr" 是一个普通的 C 数组。它没有 size () 方法,所以我怀疑这段代码是否可以编译。另一方面,sizeof(arr)是一个int*的大小,通常为4或8,与数组元素个数无关。

标签: c++ arrays algorithm sorting recursion


【解决方案1】:

不能使用 sizeof(arr) 的原因是数组在传递给函数时会变成指针。因此,当您调用“sizeof(arr)”时,在函数内部它等同于“sizeof(int*)”,这就是您得到错误的原因。

See this 其他 SO 问题的解释(我写的几乎逐字逐句)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多