溫故之 「快速排序」

快速排序是對冒泡排序的一種改進,第一趟排序時將數據分紅兩部分,一部分比另外一部分的全部數據都要小。而後遞歸調用,在兩邊都實行快速排序。數組

快速排序的思想

  1. 在數據集之中,選擇一個元素做爲"基準"(pivot)。
  2. 全部小於"基準"的元素,都移到"基準"的左邊;全部大於"基準"的元素,都移到"基準"的右邊。
  3. 對"基準"左邊和右邊的兩個子集,不斷重複第一步和第二步,直到全部子集只剩下一個元素爲止。

舉例來講

如今有一個數據集{85, 24, 63, 45, 17, 31, 96, 50}ui

  1. 第一步,選擇中間的元素45做爲"基準"。(基準值能夠任意選擇,可是選擇中間的值比較容易理解。)
    image
  2. 第二步,按照順序,將每一個元素與"基準"進行比較,造成兩個子集,一個"小於45",另外一個"大於等於45"。
    image
  3. 第三步,對兩個子集不斷重複第一步和第二步,直到全部子集只剩下一個元素爲止。
function quickSort(arr){
      if (arr.length <= 1){ return arr; } //若是數組<=1,則直接結束遞歸
      // 定義基準,並把基準從原數組刪除
      var pivotIndex = Math.floor(arr.length / 2);
      var pivot=arr.splice(pivotIndex,1)[0];
      // 定義左右數組
      var left = [];
      var right = [];
      // 比基準小的放在left,比基準大的放在right
      for(var i=0; i < arr.length; i++){
          if(arr[i] <= pivot){
              left.push(arr[i]);
          }
          else{
              right.push(arr[i]);
          }
      }
      //遞歸,對左右兩個數組不停的按照基準比較,知道子集都剩下一個爲止
      return quickSort(left).concat([pivot],quickSort(right));
  }
相關文章
相關標籤/搜索