數組中元素的排序(常用的冒泡排序、選擇排序、快速排序)


1.冒泡排序(以從小到大為例)

分析】:冒泡排序的思想就是,兩兩進行比較,第一個元素和第二個元素進行比較,如果第一個元素比第二個元素大,則這兩個元素交換位置,然后第二個元素和第三個元素進行比較,如果第二個元素比第三個元素大,交換位置,依次類推,知道到最后一個元素。在比較的時候,每進行一輪比較,就可以找到當前這一輪的最大值, 我們可以將每一輪找到的最大值放到最后,知道最終剩下兩個值,比較完之后,就可以將當前數列的數據按照從小到大的順序排列好。

以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  數列為例。

第一輪: 2    6   8   9   1   2       第二輪: 2   6   8   1   2       第三輪:2  6  1  2    第四輪:1  2   2    第五輪:1   2

     2   6    8   9   1   2           2    6   8   1   2           2     1  6  2        1     2  2

     2   6    8   9   1   2           2    6      1  8   2            2  1  2  6

     2   6   8    1   9   2           2    6   1  2   8          

     2  6    8   1   2   9

代碼:

var arr = [ 2 ,  6  ,8  ,9  ,1  ,2 ];
function bubbleSort(arr) {
  //確定輪數
  for (var i = 0; i < arr.length; i++) {
    //每一輪數值比較
    for (var j = i; j < arr.length-1; j++) {
      //誰小誰放在前面
      if (arr[i] > arr[i + 1]) {
        var temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
      }
    }
  }
  return arr;
}
console.log(bubbleSort(arr));
 
運行結果:  [1, 2, 2, 6, 8, 9]
 
2. 選擇排序(從小到大排序)
【分析】:選擇排序,遵循的是打擂台的游戲。冠軍只有一個,主要與每個人進行比,最后勝出者為冠軍。第一個人和后面的每個人都要打,誰小誰就放在最前面,然后第二個人和后面的每個人都要打,誰小,誰就是次二,依次類推。
還是以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  數列為例。  
第一輪: 2   6  8  9  1  2    第二輪:6  8  9  2  2    第三輪:8  9  6  2    第四輪:   8  9  6    第五輪:8  9
     2   6  8  9  1  2        6  8  9  2  2        6  9  8  2        6  9  8  
     2   6     8     9  1  2        2  8  9  6  2        2  9  8  6
       1      6   8     9     2  2        2  8  9  6  2
       1   6      8  9  2  2
代碼: 
arr =[ 2 ,  6  ,8  ,9  ,1  ,2 ];
function chooseSort(arr) {
  // 確定輪數
  for (var i = 0; i < arr.length-1; i++) {
    // 每一輪都和第一個進行比較
    for (var j = i + 1; j < arr.length; j++) {
      // 誰小誰放在前面
      if (arr[i] > arr[j]) {
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}
console.log(chooseSort(arr));
 
運行結果:  [1, 2, 2, 6, 8, 9]。
 
3. 快速排序(從小到大排序)
【分析】:將偏中間的數作為基准值,小於它的放在數組的左邊,大於它的放在數組的右邊,一輪比完之后,我們再將左邊的左邊的作為一個數組,右邊的作為一個數組,然后分別找中間的技術,再按上面的方法進行計算(也就是遞歸),直到數組中剩下一個元素(也是循環結束的終止條件)。

 

 代碼:

arr = [2, 6, 8, 9, 1, 2];
function quickSort(arr) {
  if(arr.length <= 1) {
    return arr;
  }
  var midIndex = parseInt(arr.length / 2);
  var midValue = arr[midIndex];
  var leftArr = [];
  var rightArr = [];

  for(var i=0;i< arr.length;i++) {
    if( i== midIndex) {
      continue;
    }
    if(arr[i] < midValue) {
      leftArr.push(arr[i]);
    }else {
      rightArr.push(arr[i]);
    }
  }
  return quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));
}
console.log(quickSort(arr));

運行結果:  [1, 2, 2, 6, 8, 9]。

4.常見的還有希爾排序和插入排序,在這里就不做詳細的介紹的。

 

 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM