鱼C论坛

 找回密码
 立即注册
查看: 831|回复: 13

[已解决]选择排序问题

[复制链接]
发表于 2020-12-23 21:00:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
main()
{
        int a[10],temp,i,j,z;
        printf("请输入十个数:\n");
        for (i=0;i<10;i++)
          scanf("%d",&a[i]);
        for (i=0;i<9;i++)
          {
           for (j=1;j<10-i;j++)
           if (a[i]<a[j])
           {temp=a[j];a[j]=a[i];a[i]=temp;}
      }
        for (i=0;i<10;i++)
           printf("%d ",a[i]);
}

代码如上,我知道正确的解法,但是我想知道上面的代码错在哪里了呢?比较之后直接把值赋给a【0】以此类推,这样不对吗?求指点!!
最佳答案
2020-12-23 21:38:36
j 的第一轮循环完成后,初始的 a[9] 被推到了 a[0] 的位置,原来的 a[8] 被换到了 a[9] 的位置;
j 的第二轮循环,i = 1, 由于 j < 10 - 1 < 9,对数组而言,就只能调换到 a[8],就这样,a[9] 永远地留在了最后;
j 的第三轮循环,i = 2, 由于 j < 10 - 2 < 8,对数组而言,就只能调换到 a[7],就这样,a[8] 永远地留在了倒数第二;
。。。。。。
所以,这样排序的方法是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-23 21:12:55 | 显示全部楼层
本帖最后由 jackz007 于 2020-12-23 21:14 编辑

        这一句
           for (j=1;j<10-i;j++)
        修改为
           for (j=i+1;j<10;j++)
        这样,i 与 j 才永远不会重叠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 21:38:36 | 显示全部楼层    本楼为最佳答案   
j 的第一轮循环完成后,初始的 a[9] 被推到了 a[0] 的位置,原来的 a[8] 被换到了 a[9] 的位置;
j 的第二轮循环,i = 1, 由于 j < 10 - 1 < 9,对数组而言,就只能调换到 a[8],就这样,a[9] 永远地留在了最后;
j 的第三轮循环,i = 2, 由于 j < 10 - 2 < 8,对数组而言,就只能调换到 a[7],就这样,a[8] 永远地留在了倒数第二;
。。。。。。
所以,这样排序的方法是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 22:01:03 | 显示全部楼层
jackz007 发表于 2020-12-23 21:12
这一句

        修改为

j=i+1我后来想到了,但是后面那个地方是我没想到的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 22:04:47 | 显示全部楼层
风过无痕1989 发表于 2020-12-23 21:38
j 的第一轮循环完成后,初始的 a[9] 被推到了 a[0] 的位置,原来的 a[8] 被换到了 a[9] 的位置;
j 的第二 ...

虽然听的不是很懂,不过看了上面那位的修改我琢磨出来了,也谢谢您!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 22:10:10 | 显示全部楼层
905853663 发表于 2020-12-23 22:04
虽然听的不是很懂,不过看了上面那位的修改我琢磨出来了,也谢谢您!!

不会吧?外循环 i 不动,内循环 j 从 1 到 10 - i = 10 - 0 ,将最后一个数与第一个数交换了
第二轮, i = 1,由于 j < 10 - i 的原因,就只能循环到 a[8]
.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 22:22:04 | 显示全部楼层
风过无痕1989 发表于 2020-12-23 22:10
不会吧?外循环 i 不动,内循环 j 从 1 到 10 - i = 10 - 0 ,将最后一个数与第一个数交换了
第二轮, i  ...

嗯嗯懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 22:23:49 | 显示全部楼层

懂了就好,正在给你作一张图呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 21:14:44 | 显示全部楼层
风过无痕1989 发表于 2020-12-23 22:23
懂了就好,正在给你作一张图呢

你好,请问我能加你微信吗,这样请教你比较方便
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 21:20:59 | 显示全部楼层
905853663 发表于 2020-12-24 21:14
你好,请问我能加你微信吗,这样请教你比较方便


不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 21:22:24 | 显示全部楼层
风过无痕1989 发表于 2020-12-24 21:20
不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧

这样啊,不好意思,那你还是少看点电脑吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 21:25:16 | 显示全部楼层
风过无痕1989 发表于 2020-12-24 21:20
不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧

加不了,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-24 21:42:18 | 显示全部楼层

我加你吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 21:54:38 | 显示全部楼层

也不行,算了没关系,我有问题就在这发吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 08:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表