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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

因之前拿代码格式搞得大家都看不到,故在注释一次, 满脸泪...
以下均为个人观点和理解,有错误的话请及时告知我哦!
逻辑:首先我们需要定义一个方法来时间排序的功能, 同时我们需要修饰一下我们的结果,让使用者见名知意所以给输出方面我们也定义一个

选择排序=由小到大=拿0角标的数值去和其他角标挨个去比较,只要比0角标值小的就替换掉,最后最小的会在左边。  举例一个: 12654    选择排序就是 会让1和2654挨个比较,最后输出12654。

class ArrayDemo                                            
   {
       public static void main(String[] args)
     {
            int[] arr= {3,6,9,2,4,1};                 //随便定个数组
            System.out.print("排序前数组:" );  
            printArray(arr);           //调用下面定义的输出方法
            selectSort(arr);           //调用下面定义的排序方法
            System.out.print("排序后数组:" );
            printArray(arr);          //调用下面定义的第二次输出方法
      }

       public static void selectSort(int[] arr)
    {
             for(int x = 0; x < arr.length - 1; x++)            //arr.length-1意思在于减少每次比较的长度,所以我们每次减掉前面已经比过的小角标
        {               
                   for(int y = x + 1; y < arr.length; y++)      //x+1的意义在于, 我们不能让0角标自己比吧, 所以我们+1 让他和后面的朋友比大小
             {
                         if(arr[x] > arr[y])                 //条件式 ,决定后面换位的因素
                {      
                              int temp = arr[x];     //定义个变量z ,这里我们x,y.z来表示,x=2,y=1;         这里的意义在于z =2
                              arr[x] = arr[y];          //x=y     2=1
                              arr[y] = temp;         //y=z      1=2       换位完成     
                        }
                  }
            }
      }

       public static void printArray(int[] arr)   //定义输出的方法。
{
            System.out.print("[" );              //首先有事儿没事儿 先输出个【
            for(int x = 0; x < arr.length; x++)              //遍历
         {        
                   if(x != arr.length - 1)                //意思如果x 不等于 前面已经比过的小值
                        System.out.print(arr[x] + "," );             //输出         如 2,
                   else     //这个是个小点。  他的意思代表的是第一次你输出的是上面的    元素和,(分隔号) ,如果你再次执行那么就是下面的“】”咯
                        System.out.println(arr[x] + "]" );    //输出   】  完结   
            }
      }
}   


疑惑点:arr.length-1的详细解答?
      自我认为是长度减1,减去的长度是之前比较过后的最左端的值,小的那个



这是效率较低的一种排序,但是用来理解是不错的。 同时这串代码中, 没有返回操作是因为本身引用的就是数组里的,所以没有必要。
明日送上另一种的选择排序的效率方法和思想

19 个回复

倒序浏览
-。-  晚安。。
回复 使用道具 举报
来学习学习!!!!!!!!!!!!!
回复 使用道具 举报
我去, 又晚上了
回复 使用道具 举报
arr.length是数组长度,arr.length-1是数组角标最大值,数字角标起始值是0
回复 使用道具 举报
Sniper-L 发表于 2015-10-15 00:44
arr.length是数组长度,arr.length-1是数组角标最大值,数字角标起始值是0

是的,没有问题 ,还不睡觉
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-10-15 00:47
是的,没有问题 ,还不睡觉

夜猫子,早了睡不着
回复 使用道具 举报
Sniper-L 发表于 2015-10-15 00:54
夜猫子,早了睡不着

哎 。怎么和我一样  - -
回复 使用道具 举报
受教了!!!!!
回复 使用道具 举报
.......好好学习吧
回复 使用道具 举报
shilu 中级黑马 2015-10-15 16:20:11
11#
加油!!
回复 使用道具 举报
必须赞一个,继续加油
回复 使用道具 举报
必须赞一个,继续加油
回复 使用道具 举报
围观群众!!!!!!!!!!
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
还是用冒泡排序比较好.
回复 使用道具 举报
代码和思路是完全正确的选择排序法。你的疑问 arr.length-1 详解:首先 x 是管外循环的,而且条件是 x < arr.length-1. y 是管内循环的,y = x+1. 说明 x 是不会遍历数组的最后一个元素的,只需要 y 能遍历到就可以了。其实这是最完美的结果。因为最后一次的循环就是 x 取倒数第二个元素,y取倒数第一个元素进行比较。全部的遍历结束。
回复 使用道具 举报
学习了  已经搞懂了 再看看  复习一下
回复 使用道具 举报
迷途老马 发表于 2015-10-15 19:22
代码和思路是完全正确的选择排序法。你的疑问 arr.length-1 详解:首先 x 是管外循环的,而且条件是 x < ar ...

亲 , 请详解一下内外循坏代表的东西,  同时 y=x+1在我的认为是和之后的一个角标比值,最后根据您的解释,他还代表着最后角标的因为是俩个最后俩个数,所以X不需要遍历到,最后直接进行比较互换就可以吧?
回复 使用道具 举报
x = 0 , 是开始循环;而循环停止是靠 x < arr.length - 1;那么就直接考虑最后一次的循环情况就OK了啊。最后一次不就是x是倒数第二个元素,而y是倒数第一个元素。 你上边的注释自己看一下,外循环的注释是不对的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马