C++ 为什么这种插入排序方法不起作用?
在这种插入排序技术中,在while循环条件下,当我比较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
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
中两个测试的顺序。