JavaScript快速排序功能詳解

admin發表於2018-07-12

排序的方法有很多種,但是使用最為廣泛的是快速排序,下面就通過程式碼示例詳細介紹一下它的實現過程。

先給出程式碼例項,然後對其的原理和實現過程進行詳細介紹。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var quickSort = function(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1);
  var left = [];
  var right = [];
  for (var index = 0; index < arr.length; index++){
    if (arr[index] < pivot) {
      left.push(arr[index]);
    }
    else {
      right.push(arr[index]);
    }
  }
  return quickSort(left).concat(pivot, quickSort(right));
};
 
var arr = [85,24,63,45,17,31,96,50];
console.log(arr.join(","));
console.log(quickSort(arr).join(","));

上面的程式碼就是一個快速排序的程式碼例項,下面介紹一下它的實現原理和實現過程。

一.實現原理:

整個原理非常的簡單,過程大體劃分如下:

(1)在資料集之中,選擇一個元素作為"基準"(pivot)。

(2)所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。

(3)對"基準"左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下一個元素為止。

下面是簡單的圖示:

第一步,選擇中間的元素45作為"基準":

基準值可以任意選擇,但是選擇中間的值比較容易理解。

a:3:{s:3:\"pic\";s:43:\"portal/201712/04/144934izisz1q1qsg7gij1.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

第二步,按照順序,將每個元素與"基準"進行比較:

形成兩個子集,一個"小於45",另一個"大於等於45"。

a:3:{s:3:\"pic\";s:43:\"portal/201712/04/144959pt7trvbidbgvkvgb.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

第三步,對兩個子集不斷重複第一步和第二步,直到所有子集只剩下一個元素為止:

a:3:{s:3:\"pic\";s:43:\"portal/201712/04/145022yzkhn77mwne20eem.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

二.程式碼註釋:

(1).var quickSort = function(arr) {},此函式實現了快速排序功能,引數是要進行排序的陣列。

(2).if (arr.length <= 1) {

  return arr;

},如果陣列的長度小於等於1,也就是說只有一個元素或者沒有元素,那麼就直接返回該陣列。

(3).var pivotIndex = Math.floor(arr.length / 2),選取基準元素,這裡我們選取儘可能居中的元素,當然任何元素都可以。

(4).var pivot = arr.splice(pivotIndex, 1),獲取這個基準元素值。

(5).var left = [],此陣列用來儲存小於基準元素的陣列元素。

(6).var right = [],此陣列用來儲存大於基準元素的陣列元素。

(7).for (var index = 0; index < arr.length; index++){

  if (arr[index] < pivot) {

    left.push(arr[index]);

  }

  else {

    right.push(arr[index]);

  }

},通過遍歷操作進行元素的比較,將小於基準的元素存入left陣列,大於基準的元素存入right陣列。

(8).return quickSort(left).concat(pivot, quickSort(right),這個是一個遞迴操作,一層一層的執行下去,最終能夠實現排序功能。

三.相關閱讀:

(1).Math.floor()參閱JavaScript Math.floor()一章節。

(2).splice()方法參閱JavaScript Array splice()一章節。

(3).push()方法參閱JavaScript push()一章節。

(4).concat()方法參閱JavaScript Array concat()一章節。

相關文章