user-0 提问: 大佬们，我自己整的“变态选择排序”为什么运行达不到效果？

回复:
user: user-0
content: 引用 7 楼 niiiloc 的回复:区别大了，一重循环无法交换已经被交换过的数，所以一重循环排序后的结果并不一定是对的 例如321 一重循环只能变成213  321->231->213 二重循环才能变成123  213->123 引用 6 楼 zyx6680599 的回复:大佬，虽然一个是一重循环，一个是二重循环，但是这两个循环都是将每一个元素和下个元素比较并交换的啊，为什么效果上就不一样呢 谢谢！

user: user-1
content: 区别大了，一重循环无法交换已经被交换过的数，所以一重循环排序后的结果并不一定是对的 例如321 一重循环只能变成213  321->231->213 二重循环才能变成123  213->123 引用 6 楼 zyx6680599 的回复:大佬，虽然一个是一重循环，一个是二重循环，但是这两个循环都是将每一个元素和下个元素比较并交换的啊，为什么效果上就不一样呢

user: user-0
content: 引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 zyx6680599 的回复:] [quote=引用 1 楼 自信男孩 的回复:] 选择排序应该是双层循环呢，看你的代码是一层循环，那么只能对数组做一次排序，找到最大值或者最小值并放到对应的位置。 大佬麻烦给我详细解释一下，（可能我太笨听不明白），我看选择排序不就是将数组的每一个元素与下一个元素做对比么？ 就类似这样：for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j])                                                     b=a[i];a[i]=a[j];a[j]=b; 与我的这段 for(i=10;i>1;i--)     {         if(a[i]<a[i-1])         {             b=a[i];             a[i]=a[i-1];             a[i-1]=b;         }     } 有什么本质上不一样呢？请大佬给予详细解答，万分感谢[/quote]  区别还是很明显的，一个是一重循环，一个是二重循环。另外， for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j])                                                     b=a[i];a[i]=a[j];a[j]=b; 这个代码有问题，缺少一个大括号。  for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j]) {                                                     b=a[i];a[i]=a[j];a[j]=b;                                         }[/quote] 大佬，虽然一个是一重循环，一个是二重循环，但是这两个循环都是将每一个元素和下个元素比较并交换的啊，为什么效果上就不一样呢

user: user-2
content: 引用 3 楼 zyx6680599 的回复:[quote=引用 1 楼 自信男孩 的回复:] 选择排序应该是双层循环呢，看你的代码是一层循环，那么只能对数组做一次排序，找到最大值或者最小值并放到对应的位置。 大佬麻烦给我详细解释一下，（可能我太笨听不明白），我看选择排序不就是将数组的每一个元素与下一个元素做对比么？ 就类似这样：for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j])                                                     b=a[i];a[i]=a[j];a[j]=b; 与我的这段 for(i=10;i>1;i--)     {         if(a[i]<a[i-1])         {             b=a[i];             a[i]=a[i-1];             a[i-1]=b;         }     } 有什么本质上不一样呢？请大佬给予详细解答，万分感谢[/quote]  区别还是很明显的，一个是一重循环，一个是二重循环。另外， for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j])                                                     b=a[i];a[i]=a[j];a[j]=b; 这个代码有问题，缺少一个大括号。  for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j]) {                                                     b=a[i];a[i]=a[j];a[j]=b;                                         }

user: user-2
content: 选择排序应该是双层循环呢，看你的代码是一层循环，那么只能对数组做一次排序，找到最大值或者最小值并放到对应的位置。

user: user-0
content: 引用 1 楼 自信男孩 的回复:选择排序应该是双层循环呢，看你的代码是一层循环，那么只能对数组做一次排序，找到最大值或者最小值并放到对应的位置。 大佬麻烦给我详细解释一下，（可能我太笨听不明白），我看选择排序不就是将数组的每一个元素与下一个元素做对比么？ 就类似这样：for(i=0;i<8;i++)                                for(j=1;j<9;j++)                                        if(a[i]<a[j])                                                     b=a[i];a[i]=a[j];a[j]=b; 与我的这段 for(i=10;i>1;i--)     {         if(a[i]<a[i-1])         {             b=a[i];             a[i]=a[i-1];             a[i-1]=b;         }     } 有什么本质上不一样呢？请大佬给予详细解答，万分感谢