A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 为梦想而活着 中级黑马   /  2014-6-19 00:06  /  1606 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 为梦想而活着 于 2014-6-19 10:39 编辑
  1. public static void selectsort(int[] arr) {
  2.                 for (int i = 0; i < arr.length-1; i++) {
  3.                         for (int j = i + 1; j < arr.length ; j++) {
  4.                                 //位置互换
  5.                                 if (arr[i] > arr[j]) {
  6.                                         int temp = arr[i];
  7.                                         arr[i] = arr[j];
  8.                                         arr[j] = temp;
  9.                                 }
  10.                         }
  11.                 }

  12.         }
复制代码
在这段选择排序函数中:
为什么 i < arr.length-1;      
为什么int j = i + 1;  

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 加油!!

查看全部评分

6 个回复

倒序浏览
i < arr.length-1;这个是比较的趟数。
int j = i + 1; i位置的下一个数和i位置的数比较。

如: 231  比较2趟就可以了。
第一趟: i=0  j=i+1=1;
第一次: 拿 3 和2比较 。2<3 不交换。
第二次: 拿1 和3比较  。  2> 1 交换。
比较了2次、
改变后的顺序为132
第二趟  i=1 ; j=i+1=2;
第一次 拿 2和3比较、3>2 交换顺序。
比较了1次。
比较后的顺序为
123
总共比较趟数是  2次.


评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 为梦想而活着 于 2014-6-19 08:38 编辑
唐坚 发表于 2014-6-19 01:31
i < arr.length-1;这个是比较的趟数。
int j = i + 1; i位置的下一个数和i位置的数比较。

我还是有点小疑问:为什么第二次: 拿1 和3比较而不是拿1和2比较呢?

我的理解:第一次拿3和2比较,2<3不换位置,还是231,紧接着拿1和2比较,2>1,则换位置变成132,
第二趟比较和你说的一样,

这是我的理解,不知道对不?
回复 使用道具 举报
1,当最后只剩下两个数的时候,你只需要拿倒数第二个数arr[i]和最后一个数arr[j]比较,然后排序就完成了,这样,i 的取值最大也就到倒数第二个索引即arr.length-2。所以i<arr.length - 1,否则下面的j=i+1就超出索引范围了;
2,选择排序每次都会确定一个数,即arr[i],每次arr[i]只需要从它后一位arr[i+1](arr[j])开始比较即可,故j=i+1。j的取值最大为arr.length-1,这也就解释了为什么i<arr.length-1。

这两句代码是息息相关的。

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
AuroraAria 发表于 2014-6-19 08:52
1,当最后只剩下两个数的时候,你只需要拿倒数第二个数arr和最后一个数arr[j]比较,然后排序就完成了,这样 ...

多谢啊,好像明白了点··········
回复 使用道具 举报
为梦想而活着 发表于 2014-6-19 08:36
我还是有点小疑问:为什么第二次: 拿1 和3比较而不是拿1和2比较呢?

我的理解:第一次拿3和2比较,21, ...

你的理解是正确的,只不过,上面那哥们打错了而已。
回复 使用道具 举报
我把楼层都看了遍······各位理解的相当深刻透彻啊{:3_50:}  我理解的很浅显,看老毕视频里,记起来挺简单的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马