国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 11:36:40
字體:
來源:轉載
供稿:網友

目前,最常見的排序算法大概有七八種,其中"快速排序"(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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉林市| 香港 | 清镇市| 建平县| 长海县| 繁昌县| 金川县| 广宁县| 巩义市| 额尔古纳市| 肥乡县| 新田县| 扎兰屯市| 张家界市| 恩施市| 大新县| 清新县| 正安县| 宣恩县| 霍州市| 甘谷县| 河南省| 琼海市| 裕民县| 永城市| 墨江| 东山县| 启东市| 原平市| 莱芜市| 瑞安市| 太和县| 景德镇市| 观塘区| 义马市| 赤壁市| 松江区| 榆树市| 台前县| 巴青县| 隆化县|