用一维数组存储输入的10个数,实现从小到大排列。程序代码的输出结果 如下:
#include<stdio.h>
int main()
{ int x[10],i,j,k;
printf("请输入要排序的10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&x[i]);
for(i=0;i<9;i++)
for(j=9;j>i;j--)
if(x[i]>x[j])
{
k=x[i];
x[i]=x[j];
x[j]=k;
}
printf("the sort number is:");
for(i=0;i<10;i++)
printf("%d\n",x[i]);
return 0;
}
scanf("%d",&x[i])这段看得懂,输入10次数字,for条件结束,下面2个for看得有点迷糊,如果x[i]<x[j]
那么跳到第三个for那,整到我迷糊,求大神慢步调试告诉我下原理,从小到大的排列。详细循环2-3次将明白给我,谢谢拉
至于for(i=0;i<10;i++)
printf("%d\n",x[i]);应该就是它已经完成了从小到大的排序,输出10个数结束
以上是我能理解的,我不理解请教下..
以下是输出10个数(10 5 6 8 20 90 88 66 66 15)
x[0]>x[9] 10>15? 这就否定了,是返回到J=8也就是10和66做比较了,意思是小的就一直去比,遇到比X[0]大的就互换,最后就成了X[0]=5,然后就用X[1]和X[J]去比较,以此类推吗?由于X[0]=5,已经取代了X[0]这个位置,接下来的排序是不会出现X[0]这个元素,那么(10 5 6 8 20 90 88 66 66 15)实际上就是9个数字排序,也就是(X[0]=5这个不会出现,X[1]=10 X[2]=6 X[3]=8 X[4]=20 X[5]=90 X[6]=88 X[7]=66 X[8]=66 X[9]=15)
第一个for为i=0;第二个for为j=9;
然后x[0]>x[9]做比较,然后x[0]>x[8]做比较,然后x[0]>x[7]做比较,
也就是要把第二个for执行完,直到j=1 条件不成立跳出了这个循环。
然后返回第一个第一个for为,i=1;,以此类推,直到i=8,也就是
x[8]>x[9]这个最后做一次比较 上面还有字数老师!
你后面的这个补充是对的,这就是冒泡排序的思想,这个排序算法还能优化的,你百度下冒泡排序优化算法。会有比较完成的答案的。
第一个for为i=0;第二个for为j=9;
然后x[0]>x[9]做比较,然后x[0]>x[8]做比较,然后x[0]>x[7]做比较,
也就是要把第二个for执行完,直到j=1 条件不成立跳出了这个循环。
然后返回第一个第一个for为,i=1;,以此类推,直到i=8,也就是
x[8]>x[9]这个最后做一次比较 上面还有字数老师!
第一个for为i=0;第二个for为j=9;
然后x[0]>x[9]做比较,然后x[0]>x[8]做比较,然后x[0]>x[7]做比较,
也就是要把第二个for执行完,直到j=1 条件不成立跳出了这个循环。
然后返回第一个第一个for为,i=1;,以此类推,直到i=8,也就是
x[8]>x[9]这个最后做一次比较 上面还有字数老师!