JavaScript快速排序功能詳解
排序的方法有很多種,但是使用最為廣泛的是快速排序,下面就通過程式碼示例詳細介紹一下它的實現過程。
先給出程式碼例項,然後對其的原理和實現過程進行詳細介紹。
程式碼例項如下:
[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作為"基準":
基準值可以任意選擇,但是選擇中間的值比較容易理解。
第二步,按照順序,將每個元素與"基準"進行比較:
形成兩個子集,一個"小於45",另一個"大於等於45"。
第三步,對兩個子集不斷重複第一步和第二步,直到所有子集只剩下一個元素為止:
二.程式碼註釋:
(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()一章節。
相關文章
- JavaScript this詳解JavaScript
- 詳解JavaScript原型JavaScript原型
- JavaScript Promise 詳解JavaScriptPromise
- JavaScript之this詳解JavaScript
- JavaScript事件詳解JavaScript事件
- JavaScript原型詳解JavaScript原型
- JavaScript arguments物件詳解JavaScript物件
- JavaScript表格排序詳解JavaScript排序
- JavaScript小球碰壁詳解JavaScript
- JavaScript中的this詳解JavaScript
- JavaScript閉包詳解JavaScript
- 詳解 JavaScript 閉包JavaScript
- JavaScript arguments 物件詳解JavaScript物件
- 詳解 JavaScript 儲存JavaScript
- javascript操作iframe詳解JavaScript
- 詳解 JavaScript 的類JavaScript
- 詳解javascript的類JavaScript
- Javascript陣列詳解JavaScript陣列
- javascript 閉包詳解JavaScript
- JavaScript作用域詳解JavaScript
- JavaScript Source Map 詳解JavaScript
- 詳解JavaScript中的thisJavaScript
- 快速生成樹原理詳解
- Solon詳解(一)- 快速入門
- 演算法 | 快速排序詳解演算法排序
- 玩轉 JavaScript 之詳解 thisJavaScript
- JavaScript 檔案物件詳解JavaScript物件
- JavaScript繼承詳解(二)JavaScript繼承
- JavaScript之原型深入詳解JavaScript原型
- JavaScript返回頂部詳解JavaScript
- JavaScript 打字機效果詳解JavaScript
- JavaScript抽獎效果詳解JavaScript
- JavaScript 秒錶效果詳解JavaScript
- Javascript—閉包詳解(3)JavaScript
- JavaScript中 Map 物件詳解JavaScript物件
- Javascript之字串拼接詳解JavaScript字串
- JavaScript 繼承方式詳解JavaScript繼承
- JavaScript函式模式詳解JavaScript函式模式