哪为高手帮忙详细解释下这个数组的运行逻辑!(C数组)

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:48:49
main()
{
int array[10];
int i,j,min,stmp;
for(i=0;i<10;i++) scanf("%d",&array[i]);
for(i=0;i<9;i++)
{
min=array[i];
for(j=i+1;j<10;j++)
if(min>array[j]) /*里面的4行语句*/
{
min=array[j];
stmp=array[i];
array[i]=array[j];
array[j]=stmp;
}
}
for(i=0;i<10;i++) printf("%d ",array[i]);
printf("\n");
}
输入10个数(20 30 50 25 32 15 65 98 33 16)
为什么输出的结果不是(20 30 25 32 15 50 65 33 16 98)
而是正常的从小到大的排列呀理解不了。

第1次循环时 i=1
for(j=i+1;j<10;j++)
if(min>array[j]) /*里面的4行语句*/
{
min=array[j];
stmp=array[i];
array[i]=array[j];
array[j]=stmp;
}

这个循环的作用是第1项和数组每一项比较大小 选出最小的放在第1位

外面还有for(i=0;i<9;i++) 针对i的大循环
也就是i=2,3,4,5,6...时都进行一次与后面数字比较大小的运算

当外面大循环也运行完之后 当然就是相当于把这一组数都比较了一遍啊
这个不难理解的 可以写一组数在纸上运行一下 相信你会明白这个道理
这个程序很经典哦~

for(i=0;i<9;i++)
{
min=array[i];
for(j=i+1;j<10;j++)
if(min>array[j]) /*里面的4行语句*/
{
min=array[j];
stmp=array[i];
array[i]=array[j];
array[j]=stmp;
}
这几句语句就是排序啊!!!这种在算法上叫做冒泡排序!!