c语言,一维数组实现10个数从小到大例子

用一维数组存储输入的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的意思是,先把x[0]和x[9]比较,如果x[0]>x[9],则把他们位置颠倒,然后x[0]和x[8],如果x[0]>x[8],则把他们位置颠倒.....一直到j=1(也就是j=i,不满足条件j>i)结束。接下来就是x[1]和x[9]比较如果x[1]>x[9],则把他们位置颠倒........知道i=9结束。不知道能不能看懂。。PS:排序是个数的话应该是(i=0;i<10;i++)追问

第一个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]这个最后做一次比较 上面还有字数老师!

追答

你后面的这个补充是对的,这就是冒泡排序的思想,这个排序算法还能优化的,你百度下冒泡排序优化算法。会有比较完成的答案的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-22
第一个for循环里嵌套了第二个for循环,里面就是冒泡排序法,将x[0]与x[9].x[8] 等依次比较。第三个for循环是输出,这得理解。里面的循环必须执行完。追问

第一个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]这个最后做一次比较 上面还有字数老师!

第2个回答  2014-05-22
这个程序里面少了几个{} ,那两个for应该是这样的:
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;
}
}

}
这样看明白了吧?
第3个回答  2014-05-22
懂冒泡法就懂这个了,你可以查一下冒泡法排序
第4个回答  2014-05-22
i = 0;
for(j=9;j>i;j--)
if(x[i]>x[j])
{
k=x[i];
x[i]=x[j];
x[j]=k;
}
x[0]是这十个数中最小的

i = 1;
for(j=9;j>i;j--)
if(x[i]>x[j])
{
k=x[i];
x[i]=x[j];
x[j]=k;
}
x[1]是这除x[0]外九个数中最小的

依此类推,其实就是一冒泡排序法
第5个回答  2014-05-22
在循环中心的条件语句决定了排序的方向,如果是大于号则降序排列,小于号升序;
条件语句的内容是,如果发现下标是i的数比下标是j的数大就交换,或者说下标i只保留小的数;
再看外层循环:
i循环指定i的值从0~8变化,也就是每次循环指定的a[i]顺序是数组前9个数
j循环的值从9变到i+1,就是在i确定后a[j]分别指向a[i]后面的每一个数,这些数与a[i]比较,比a[i]小就交换,最后a[i]必定存放a[i]~a[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]这个最后做一次比较 上面还有字数老师!

相似回答