问答详情
源自:6-12 综合练习

降序无效为何?

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);
}


提问者:Unbroken_heart 2015-10-18 16:09

个回答

  • onemoo
    2015-10-18 17:34:24
    已采纳

    算法错了。

    降序可以采用这样的算法:

    先让最后一个数和它前面的数相比较,比前面那个小的话,就和前面的互换位置,再让倒数第二个数和前面的数比较...一直比较到前两个数,这样比较一轮下来,最前面的那个数肯定是最小的。这就是一次内循环。

    再次从最后一个数开始,让其与前面的数比大小,把更小的换到前面......这次要比到第二个数(因为第一个数已经是最小的了),这样第二个数就是除第一个数以外最小的了。这是第二次内循环。

    这样的内循环一共要进行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;
            }
        }
    }