JS 手撕快速排序

2021-10-22 06:23:06 字數 639 閱讀 6899

我們都知道陣列的sort底層原理就是快速排序,那麼我們可以自己封裝乙個sort函式來更深層次的理解快速排序

看了阮一峰的部落格後發現他提供的思路更加的簡潔易懂

快速排序的重要之處就是基準數的選擇,通常我們選擇陣列中的第乙個元素作為基準數,可是這是乙個優選嗎?

隨機基準數

固定的基準數和隨機基準數比較起來隨機基準數是更優的選擇

三數取中博文參考:

手撕快速排序

function

quicksort

(arr)

let pivotindex = math.

floor

(arr.length/2)

;//取下標在中間(向下取整)位置

let pivot = arr[pivotindex]

;let left =

let right =

;for

(let i=

0;i)else

}return

quicksort

(left)

.concat

([pivot]

,quicksort

(right));

}

後續我會找時間畫圖詳解一下整個過程…

手撕演算法 排序

時間複雜度o n 2 o n 2 o n2 空間複雜度 o 1 穩定 從第乙個元素開始,認為左邊的序列是有序的,從有序部分的最後乙個向前比較,如果當前元素小於有序部分就交換,否則比較下乙個元素。function insertmerge arr else return arr let arr 1 5,...

演算法 手撕堆排序

時間複雜度 o n logn o nlogn o nlog n 但是實際軟開中,快排效能更好。堆性質 堆排序 從小到大,利用最大堆和陣列 從後往前堆化陣列元素,此時最大元素在首位置 交換元素堆化 include include using namespace std void heapsort in...

Python手撕排序演算法

氣泡排序 公升序 歸併排序 公升序 分而治之 每次在若干無序資料中查詢最小數,放在無序資料的首位。1.從n個元素的列表中找最小值及其下標,與第乙個元素交換 2.從第二個元素開始的n 1個元素中找最小值及其下標,與第二個元素交換 3.以此類推,n 1輪後即為排好序的資料 a 49 38,65 97,7...