以下选择排序代码在 a[p]>a[j] 行中产生问题,为什么?尽管如果我将 a[i] 而不是 a[p] 放在它工作正常
for (i=0; i<n; i++){
p=i;
for (j=i+1; j<n; j++) {
if(a[p] > a[j]) {
p=j;
t=a[i];
a[i]=a[p];
a[p]=t;
}
}
}
最佳答案
线路p=j;
在内循环中发生变化p
。这会导致p
与 i
不同稍后,当 if(a[p]>a[j])
用新的 j
进行评估.
您的代码不需要p
根本不。测试可以仅仅是if (a[i] > a[j])
,循环内的代码可以是:
t = a[i];
a[i] = a[j];
a[j] = t;
看看你的代码,你似乎认为你需要记录 i
或j
在p
暂时然后使用p
。那是没有必要的。使用 i
的值或j
,只需使用 i
或j
.
关于c - 我对数组索引感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032925/