我的选择排序实现在 j<的情况下不起作用n-2 或 n-1 或 n 。我做错了什么?
是否有在线IDE可以让我们监控控制回路?
#include <stdio.h>
#define n 4
int main(void) {
int a[n]={4,3,2,1};
int j,min;
for(int i=0;i<n;i++){
min=i;
for(j=i+1;j<n-3;j++)
if(a[j]>a[j+1])
min=j+1;
if(min!=i){
int t=a[min];
a[min]=a[i];
a[i]=a[t];
}
}
for(int i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
答案 0 :(得分:0)
您的代码确实在n-3
上有一个奇怪的限制,但它还有其他一些缺陷:
a[min]
)进行比较,而不是数组中的下一个/上一个元素a[t]
,而应来自t
本身。以下是更正后的代码:
int main(void) {
int a[n]={4,3,2,1};
int j,min;
for(int i=0;i<n;i++){
min=i;
for(j=i+1;j<n;j++)
if(a[min]>a[j])
min=j;
if(min!=i){
int t=a[min];
a[min]=a[i];
a[i]=t;
}
}
for(int i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
注意:要在在线IDE中查看中间结果,为什么不在循环中添加 printf 调用?当然,对于较大的代码项目,您最好使用具有所有调试功能的本地安装的IDE,并逐步完成代码。