Javascript實現快速排序(Quicksort)的演算法詳解,快速排序演算法詳解

來源:互聯網
上載者:User

Javascript實現快速排序(Quicksort)的演算法詳解,快速排序演算法詳解

目前,最常見的排序演算法大概有七八種,其中"快速排序"(Quicksort)使用得最廣泛,速度也較快。它是圖靈獎得主C. A. R. Hoare(1934--)於1960時提出來的。

"快速排序"的思想很簡單,整個排序過程只需要三步

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

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

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

舉例來說,現在有一個資料集{85, 24, 63, 45, 17, 31, 96, 50},怎麼對其排序呢?

第一步,選擇中間的元素45作為"基準"。(基準值可以任意選擇,但是選擇中間的值比較容易理解。)

第二步,按照順序,將每個元素與"基準"進行比較,形成兩個子集,一個"小於45",另一個"大於等於45"。

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

下面參照網上的資料,用Javascript語言實現上面的演算法。

首先,定義一個quickSort函數,它的參數是一個數組。

var quickSort = function(arr) {};

然後,檢查數組的元素個數,如果小於等於1,就返回。

var quickSort = function(arr) {  if (arr.length <= 1) { return arr; }};

接著,選擇"基準"(pivot),並將其與原數組分離,再定義兩個空數組,用來存放一左一右的兩個子集。

var quickSort = function(arr) {  if (arr.length <= 1) { return arr; }  var pivotIndex = Math.floor(arr.length / 2) ;  var pivot = arr.splice(pivotIndex, 1)[0];  var left = [];  var right = [];};

然後,開始遍曆數組,小於"基準"的元素放入左邊的子集,大於基準的元素放入右邊的子集。

var quickSort = function(arr) {  if (arr.length <= 1) { return arr; }  var pivotIndex = Math.floor(arr.length / 2) ;  var pivot = arr.splice(pivotIndex, 1)[0];  var left = [];  var right = [];  for (var i = 0; i < arr.length; i++){    if (arr[i] < pivot) {      left.push(arr[i]);    } else {      right.push(arr[i]);    }  }};

最後,使用遞迴不斷重複這個過程,就可以得到排序後的數組。

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 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));}; var dataArray = [85,24,63,45,17,31,96,50];console.log(dataArray.join(","));console.log(quickSort(dataArray).join(","));

希望本文所述對大家的javascript程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.