1. 程式人生 > >排序算法——選擇排序(js語言實現)

排序算法——選擇排序(js語言實現)

col log () color chan 算法 lec 選擇 代碼

選擇排序:顧名思義選擇,選擇排序屬於O(N^2)的排序算法,意思就是選擇數組中的最小的拿出來放在第一位,然後再剩下的數裏面,選擇最小的,排在第二位,以此類推。

例如:8 3 4 5 6 2 1 7

第一次:尋找數組中最小的數1,然後和8替換,得到 1 3 4 5 6 2 8 7

第二次:因為1的位置已經確定,所以只需要找剩下數組中最小的就行了,2和3互換得到1 2 4 5 6 3 8 7

第三次:1和2的位置已經確定,就看剩下的數中最小的數,3和4互換,結果是1 2 3 5 6 4 8 7

.........就這樣以此類推直到正確的結果為止1 2 3 4 5 6 7 8 ,代碼如下

 1 var arr = [8,3,4,5,6,2,1,7];
 2 
 3 function exchange(array, r1, r2){
 4     var temp = array[r1];
 5     array[r1] = array[r2];
 6     array[r2] = temp;
 7 }
 8 
 9 function selectionSort(arr){
10     for(let i = 0;i < arr.length;i++){
11         var minIndex = i;
12         for(let j = i + 1; j < arr.length; j++){
13 if(arr[j] < arr[minIndex]){ 14 minIndex = j; 15 } 16 } 17 exchange(arr, i, minIndex); 18 } 19 return arr; 20 } 21 22 console.log(selectionSort(arr));

exchange互換函數,因為js語言中沒有c++語言swap()函數實現值的互換,需要自定義函數來實現。selectionSort()函數的邏輯是兩層for循環,把最小值的索引放在minIndex中。[8,3,4,5,6,2,1,7]

比如我們聲明的數組第一次先把arr[minIndex]作為最小值,因為是第一次循環i=0;所以arr[0]當作最小值,接下來從(i+1)的索引開始判斷,因為3<8,所以minIndex變為1,arr[minIndex]=arr[1]=3,又因為4>3,什麽也不做,接著5>3,6>3,不作為。碰到2的時候,2<3,所以2的索引賦值給minIndex,此時minIndex=5,1的時候1<arr[5],1的索引值復制給minIndex,這個時候minIndex=6,由於7大於1,不作為。第一輪的循環,minIndex=6。執行exchange函數,8和1互換位置。就這樣循環下去即可。

剛才又用一下es6的變量的解構賦值,親測有效。

技術分享

排序算法——選擇排序(js語言實現)