Hc丶
2015-11-01 15:28
#include <stdio.h>
int main()
{
int score[10]={67,98,75,63,82,79,81,91,66,84};
int m=0,j=0,sum=0;
for(m=0;m<10;m++)
{
for(j=0;j<10;j++)
{
if(score[m]<score[j])
{
sum=score[j];
score[j]=score[m];
score[m]=sum;
}
}
}
for(m=0;m<10;m++)
{
printf("score[%d]=%d\n",m,score[m]);
}
return 0;
}
这会使得大的在前面,小的在后面啊,哪里错了
是这样的,比如就3个数字,4 6 5来说,执行是 4 6 5 ——6 4 5——4 6 5——4 5 6. 结果是升序排列的。可是你认为的大的在前面,小的在后面的情况是有前提的:就是小的原先在大的前面,比如 4 6,经过交换编程6 4,是下降的。但是如果是原先是 6 4,经过交换就是4 6 ,就是升序的了。比如4 6 5,第一次外循环,就是4和6交换,变成6 4 5(由于6比5大,不会交换,因为第一次大循环只会交换一次,应该能看懂吧)。但是当第二次大循环时,6和4交换,又变回4 6 5(第二次循环时,由于6比5大,所以不会交换),可见,这2层循环其实是首先让大的往前排,小的在后面,但是轮到后面的进行循环时,就会让前面的比他大的和他进行替换。或者是这样说吧,每次循环保证循环次数的编号的数字的前面都是比该数字小的。比如第一次变成6 4 5,保证6的前面都是比6小的。然后第二次变成4 6 5,保证第二个数6的前面都是比6小的。然后第三次变成4 5 6,保证第三个数6的前面都是比他小的。因此是降序排列。
我有个好方法 把”if(score[m]<score[j])“中的”<“改为”>“ ,可能就正确了,有待验证哦!
【PS:其实这个for嵌套是有问题的,我没有推演为什么你的程序能排序(其实程序是有问题的),但我很想知道结果,到时候告诉我】
C语言入门
926026 学习 · 20793 问题
相似问题