我們都知道陣列的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...