从零开始学算法 - 选择排序

选择排序的思路:
假设当次遍历第一个数字是数组中最小的,循环后面的数字,依次和它作比较,如果有更小的,就换到第一个。
每一次遍历,最小的数字就会被选择到数组的最前面,几次遍历过后,数组的排序完成。
 
用一个长度为10的数组,解释一下选择排序的过程:
原始数组:[72, 34, 51, 80, 14, 92, 84, 95, 68, 22]
第一次遍历:
初始选择:[72, 34, 51, 80, 14, 92, 84, 95, 68, 22] 
选择交换:[34, 72, 51, 80, 14, 92, 84, 95, 68, 22] 
选择交换:[14, 72, 51, 80, 34, 92, 84, 95, 68, 22] 
找不到比14更小的数字后,第一次遍历完成。
 
将上述过程翻译成代码: 
基本实现:
function selectSort(arr){
  for(var i=0;i<arr.length;i++){
    //假设arr[i]是最小值     
var min = arr[i];     for(var j=i+1;j<arr.length;j++){
      //循环中遇到比arr[i]更小的,就交换       
if(min>arr[j]){         var tmp = min;         min=arr[j];         arr[j]=tmp;       }     }     arr[i]=min;   }
}

 优化一下:

找到当次循环中的最小值后,再交换,可以减少操作数组的次数。

function selectSort(arr){
  for(var i=0;i<array.length;i++){
    //只假设最小值的下标     
var minIndex = i;     for(var j=i+1;j<array.length;j++){
      //循环找到更小值时,也只交换下标       
if(array[minIndex]>array[j]){         minIndex = j;       }     }
    //找到最小下标后,再进行交换     
if(minIndex != i){       var tmp = array[minIndex];       array[minIndex] = array[i];       array[i] = tmp;     }   }
}

 

posted @ 2018-10-23 09:27  月亮和电池  阅读(123)  评论(0编辑  收藏  举报