为了账号安全,请及时绑定邮箱和手机立即绑定

降序无效为何?

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


正在回答

1 回答

算法错了。

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

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

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

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


0 回复 有任何疑惑可以回复我~
#1

Unbroken_heart 提问者

已解决,非常感谢!
2015-10-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       924613    人
  • 解答问题       20763    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

降序无效为何?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信