为什么排序算法会进入无限循环

时间:2014-09-25 23:37:51

标签: c++ arrays

我的代码:(我希望它按照升序对数组进行排序)。

void sort( int arr[], int n) {
    int c=0;

    for(int i = 0; i<n-1; ++i) {
        if (arr[i]>arr[i+1]) {
            c=arr[i];
            arr[i]=arr[i+1];
            arr[i]=c;
            i=0;
        }
    }

}   

示例数组:int arr[4]={3,1,2,4};

sort(arr,4);

错误:无限循环???

1 个答案:

答案 0 :(得分:4)

用于交换数组中两个连续元素的代码是错误的。将if语句中的前三行替换为:

c = arr[i];
arr[i] = arr[i+1];
arr[i+1] = c;

最后一行是我修复过的。

此算法称为bubble sort

编辑:确保正确排序需要做的另一件事是在if语句末尾将i设置为-1而不是0 。如果你只是将它设置为0,那么在循环的下一次迭代中它将增加并变为1,这意味着你的代码将不会考虑交换循环的前两个元素。 (感谢Anton Savin的评论。)