选择排序问题
#include<stdio.h>main()
{
int a,temp,i,j,z;
printf("请输入十个数:\n");
for (i=0;i<10;i++)
scanf("%d",&a);
for (i=0;i<9;i++)
{
for (j=1;j<10-i;j++)
if (a<a)
{temp=a;a=a;a=temp;}
}
for (i=0;i<10;i++)
printf("%d ",a);
}
代码如上,我知道正确的解法,但是我想知道上面的代码错在哪里了呢?比较之后直接把值赋给a【0】以此类推,这样不对吗?求指点!! 本帖最后由 jackz007 于 2020-12-23 21:14 编辑
这一句
for (j=1;j<10-i;j++)
修改为
for (j=i+1;j<10;j++)
这样,i 与 j 才永远不会重叠 j 的第一轮循环完成后,初始的 a 被推到了 a 的位置,原来的 a 被换到了 a 的位置;
j 的第二轮循环,i = 1, 由于 j < 10 - 1 < 9,对数组而言,就只能调换到 a,就这样,a 永远地留在了最后;
j 的第三轮循环,i = 2, 由于 j < 10 - 2 < 8,对数组而言,就只能调换到 a,就这样,a 永远地留在了倒数第二;
。。。。。。
所以,这样排序的方法是错误的 jackz007 发表于 2020-12-23 21:12
这一句
修改为
j=i+1我后来想到了,但是后面那个地方是我没想到的。。。 风过无痕1989 发表于 2020-12-23 21:38
j 的第一轮循环完成后,初始的 a 被推到了 a 的位置,原来的 a 被换到了 a 的位置;
j 的第二 ...
虽然听的不是很懂,不过看了上面那位的修改我琢磨出来了,也谢谢您!! 905853663 发表于 2020-12-23 22:04
虽然听的不是很懂,不过看了上面那位的修改我琢磨出来了,也谢谢您!!
不会吧?外循环 i 不动,内循环 j 从 1 到 10 - i = 10 - 0 ,将最后一个数与第一个数交换了
第二轮, i = 1,由于 j < 10 - i 的原因,就只能循环到 a
....... 风过无痕1989 发表于 2020-12-23 22:10
不会吧?外循环 i 不动,内循环 j 从 1 到 10 - i = 10 - 0 ,将最后一个数与第一个数交换了
第二轮, i...
嗯嗯懂了 905853663 发表于 2020-12-23 22:22
嗯嗯懂了
懂了就好,正在给你作一张图呢 风过无痕1989 发表于 2020-12-23 22:23
懂了就好,正在给你作一张图呢
你好,请问我能加你微信吗,这样请教你比较方便{:5_95:} 905853663 发表于 2020-12-24 21:14
你好,请问我能加你微信吗,这样请教你比较方便
不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧 风过无痕1989 发表于 2020-12-24 21:20
不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧
这样啊,不好意思,那你还是少看点电脑吧 风过无痕1989 发表于 2020-12-24 21:20
不敢骗你,我眼睛不好,手机基本就是接个电话,微信基本不看。你在论坛这里加我好友吧
加不了,,,
905853663 发表于 2020-12-24 21:25
加不了,,,
我加你吧 风过无痕1989 发表于 2020-12-24 21:42
我加你吧
也不行,算了没关系,我有问题就在这发吧
页:
[1]