C语言 冒泡排序法 我老是弄不明白内循环 我觉得内循环只有外循环的一半啊。 如何进行的排序?

如题所述

main() { int i,j,temp; int a[10];/声明数组/ for(i=0;i<10;i++)
scanf ("%d,",&a[i]);/输入数组/
for(j=0;j<=9;j++) /执行外循环,比如此时j=1/
{ /此时j=1/
for (i=0;i<10-j;i++)
if (a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;} /内循环执行,从a[0]和a[1]比较,大的值给a[1]。然后再比a[1]a[2],最后a[9]付值为最大值了。j=1时的内循环执行完了。外循环再执行,j=2,最后a[0]到a[8]中,a[8]又被付值为最大,j=2时的内循环执行完。之后外循环j依次执行到最后,a数组就被排列成从小到大排列的数了/
}
for(i=1;i<11;i++)
printf("%5d,",a[i] ); printf("\n");
}追问

恩恩 这个明白了 我的意思是
比如 当j=5 这时 内循环就不满足 i<10-j了啊 直接跳出内循环继续外循环 就不能继续比较了啊

追答

j=5时,内循环为for(i=0;i<5;i++);意思就是比较剩下的a[0]a[1]a[2]a[3]a[4],从中选出最大值并把最大值赋值给a[4]。之后j=6,for(i=0;i<4;i++)比较a[0],a[1],a[2]a[3]从中选出最大值赋值给a[3].每次比较,都从剩下的数中找出最大值

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-18
你把代码发上我给你讲解追问

for(j=0;ja[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}

比如网上找来的这个 对于第二个for 我觉得根据 i<9-i 这个判断句 内循环只能执行外循环的一半啊

追答

你上面的冒泡排序是错的,有9个元素吧,内循环只有8个,所以每次比较第九个元素没有比。只有等外循环在第8的时候,第就元素的值才被作比较。这样就错了

相似回答