中易网

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

答案:2  悬赏:50  
解决时间 2021-04-28 06:10
  • 提问者网友:伪情浪人
  • 2021-04-27 10:46
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])
{
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)
而是正常的从小到大的排列呀理解不了。
最佳答案
  • 二级知识专家网友:转身→时光静好
  • 2021-04-27 11:36
第1次循环时 i=1
for(j=i+1;j<10;j++)
if(min>array[j])
{
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...时都进行一次与后面数字比较大小的运算

当外面大循环也运行完之后 当然就是相当于把这一组数都比较了一遍啊
这个不难理解的 可以写一组数在纸上运行一下 相信你会明白这个道理
这个程序很经典哦~
全部回答
  • 1楼网友:放肆的依賴
  • 2021-04-27 12:06
你好! for(i=0;i<9;i++) { min=array[i]; for(j=i+1;j<10;j++) if(min>array[j]) { min=array[j]; stmp=array[i]; array[i]=array[j]; array[j]=stmp; } 这几句语句就是排序啊!!!这种在算法上叫做冒泡排序!! 如有疑问,请追问。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息