C++ 为什么这种插入排序方法不起作用?

C++ 为什么这种插入排序方法不起作用?,c++,C++,在这种插入排序技术中,在while循环条件下,当我比较current和arr[j]时,程序工作,但如果我比较arr[I]和arr[j]时,程序不会给出正确的输出。 虽然current和i是相同的,但你知道有什么不同吗 void insertionSort(int arr[], int s){ for(int i=1;i<s;i++){ int current = arr[i]; int j=i-1; while(arr[j]>c

在这种插入排序技术中,在while循环条件下,当我比较
current
arr[j]
时,程序工作,但如果我比较
arr[I]
arr[j]
时,程序不会给出正确的输出。
虽然
current
i
是相同的,但你知道有什么不同吗

void insertionSort(int arr[], int s){
    for(int i=1;i<s;i++){
        int current = arr[i];
        int j=i-1;
        while(arr[j]>current && j>=0){// if I use arr[i] instead of current the program gives wrong output.
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = current;
        printArray(s, arr);
    }
}
void insertionSort(int-arr[],int-s){
对于(inti=1;iccurrent&&j>=0){//如果我使用arr[i]而不是current,程序会给出错误的输出。
arr[j+1]=arr[j];
j--;
}
arr[j+1]=电流;
打印阵列(s、arr);
}
}

它们不一样,因为您在while循环中通过索引i对数组
arr
进行操作,并且当
j+1==i
时,可能会将一个新值写入数组[i],这就是为什么您需要在while循环之前保存索引i处arr的当前值。

如果您仔细查看,您可以注意到,如果
while
循环执行多个迭代,它将不会在第二次迭代时比较相同的值,因为
arr[i]
arr[j+1]
行修改。您将
j
设置为
i-1
,然后修改
arr[j+1]
,这是
arr[i]
的位置,因为
j==i-1
意味着
j+1==i
。您也可以使用调试器一步一步地跟踪程序。查看
arr[j]>current&&j>=0
中两个测试的顺序。