黑马程序员技术交流社区

标题: 请教选择排序的一个小问题. [打印本页]

作者: 610757257    时间: 2014-12-29 01:37
标题: 请教选择排序的一个小问题.
  1. public static void selectsort(int []arr)
  2.         {
  3.                 for (int x=0;x<arr.length-1;x++ )
  4.                 {
  5.                         for (int y=x+1;y<arr.length;y++ )
  6.                         {
  7.                                 if (arr[x]>arr[y])
  8.                                 {
  9.                                         swap(arr,x,y);
复制代码

我想问一下for (int x=0;x<arr.length-1;x++ ),x<arr.length-1;数组元素是:{2,4,5,7,8,2,1,}那如果x循环到第六次6<7-1,条件不满足,结束运算,那么第六位与第七位的元素怎么调换位置的??????请前辈们解答解答我这个问题....谢谢!


作者: _kirito    时间: 2014-12-29 02:12
数组中有7个元素,长度为7,arr.length-1为6,遍历数组从0开始,外循环进行了6次,内循环在进行第六次比较的时候,也就是i为5的时候,比较的是第5角标和第6角标的元素,也就是最后两个元素。完毕
作者: 雪落纷飞    时间: 2014-12-29 02:38
本帖最后由 雪落纷飞 于 2014-12-29 02:40 编辑

外循环只是要比较的个数或者次数,   生活中的思想按照排序法你要比较三个数7 5 3    ,  第一遍先找一个最小的3在前面了,第二遍找到个第二小的5在第二位,剩下的那一根本不用比了。只是比较两次。       双循环外循环只是控制次数的,内循环才是实现比较方法的,选择排序外循环每循环一次最值固定前面一个,当外循环 为6内循环的比较只有6和7, 所以。。。。。
作者: dandan520    时间: 2014-12-29 06:27
学习学习。
作者: yedaiwang    时间: 2014-12-29 09:04
最后两位已经不需要比较了
作者: 446111220    时间: 2014-12-29 09:06
最后两位已经不需要比较了
作者: 阿丹435    时间: 2014-12-29 10:23
x=5时,y=6(只能),此时比较arr[x]和arr[y]就是比较arr[5]和arr[6],又因为数组下标从零开始,所以此时比较的就是第六位和第七位元素就是
作者: 飘渺之旅    时间: 2014-12-29 21:59
二楼说的有理。
作者: FINE    时间: 2014-12-30 10:33
一楼回答的是正解
作者: Y_木头人    时间: 2014-12-30 20:12
受教。。
作者: 李增宽    时间: 2014-12-30 23:40
一楼二楼说的好
作者: 寻觅    时间: 2014-12-31 09:24
x,y是数组的角标,x是从0开始的,x最大是5,对应的是第六个元素,就是倒数第二个,y是从x下一个算起,所以当x是倒数第二个时,y是最后一个,y为6,这时的比较是最后一轮,根本没有x==6的时候,你主要是忽略了角标从0开始这个小细节!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2