Unbroken_heart
2015-10-18 16:09
int rankS(int score[]){ int i,j,temp; for(i=0;i<=N-2;i++) /* N为10 */ { for(j=N-1;j>=i;j--) { if(score[i]<score[j]){ temp = score[i]; score[i] = score[j]; score[j] = temp; } } } printS(score); }
算法错了。
降序可以采用这样的算法:
先让最后一个数和它前面的数相比较,比前面那个小的话,就和前面的互换位置,再让倒数第二个数和前面的数比较...一直比较到前两个数,这样比较一轮下来,最前面的那个数肯定是最小的。这就是一次内循环。
再次从最后一个数开始,让其与前面的数比大小,把更小的换到前面......这次要比到第二个数(因为第一个数已经是最小的了),这样第二个数就是除第一个数以外最小的了。这是第二次内循环。
这样的内循环一共要进行N-1次,外层循环就是控制这N-1的。
int i, j; for (i = 0; i < N-1; ++i) { for (j = N-1; j > i; --j) { int temp; if (score[j] < score[j-1]) { temp = score[j-1]; score[j-1] = score[j]; score[j] = temp; } } }
C语言入门
926027 学习 · 20793 问题
相似问题