数据结构和算法之排序五:选择排序

  我们上一篇谈到了冒泡排序,其实我也说了,这两个排序方式何其相似,如果掌握了冒泡排序再来进行选择排序的理解我觉得完全没有太大的问题。那么什么叫做选择排序呢?我们可以理解为矮子里面挑高个,比如说呀有一个富翁来到了一个村庄,看见一群女的,这时候他是不是会把自己的老婆拿出来比较,遇到更好看的是不是要带走,直到比较一圈下来,他手里的那个妹子是不是最漂亮的,这时候他消停一下,过段时间觉得腻味了是不是又要出来换了,这时候他把那个妹子放在家里,在从头开始寻找,你说找到的是不是又会是最漂亮的。整个N-1次,那是不是这样妹子的漂亮榜单是不是就有序了。话不多说,看图理解下我讲的故事:

  

 

  所以说呀这就是强盗行为,遇到自己想的就拿过来,还有比这更强盗的么。上代码表示敬意:

public static void selectSort(int arr[]){
    //外层循环控制我们将要确定的数据
    for(int i = 0;i < arr.length - 1;i++){
      //里层循环控制比较的数据
        for(int j = i + 1;j < arr.length;j++){
                if(arr[i] < arr[j]){
                     int key = arr[i];
                     arr[i] = arr[j];
                     arr[j] = key;  
                 }
            }
    }
}

   我们可以看见我们控制次数的时候进行了-1的操作,这时因为你都保证前边所有的数据都通过排序处理好了,那么最后一个可不就是无冕之王,待着最后了呗。里层循环+i的原因是因为我们在经历过i次循环以后是不是前面的i个数据都已经默认有序了,还去搞别人干嘛。所以为了优化,我们可以+i。所以在这里我们可以简单看出来冒泡和选择,冒泡就是两个邻居之间进行比较,进行值传递,保证最后一个数据的最大或者最小。选择排序就是第一个数据拿着万贯家财挑美女,最好看的带回家先,保证每次带回家的都是剩下的一堆中自己最想要的。

posted @ 2017-11-30 23:49  GoNewLife  阅读(365)  评论(3编辑  收藏  举报