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