# Quick Sort ###### tags: `演算法` `資料結構` {%hackmd @rpyapp/theme %} [toc] # 課堂作業 > [老師的範例_array](https://github.com/pecu/DSA/blob/master/05_QuickSort/QuickSort_Array_Recursive.ipynb) > [老師的範例_linked-List](https://github.com/pecu/DSA/blob/master/05_QuickSort/QuickSort_LinkedList.py) # 課外資料 ## 簡介  Quick Sort 他是以 [divide-and-conquer](https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm) 演算法為基礎。他的概念其實很簡單,就是從 array 中抽取一個數字為 pivot(基準點),將整個 array 依基準點分成兩個小的 array, 比基準點大的放在右邊的array,比基準點小的放在左邊的array,之後左右兩邊的小array 繼續重複同樣到動作(找基準->分兩邊)直到該小array剩下一個為未排序(未當過基準點)。 > 他有四種方式 - 總是以第一個 element 為基準點 - 總是以最後一個 element 為基準點 - 以中位數為基準點 - 隨機基準點(下圖)  ## 特點 - 他有回歸性 (recursive) - 屬於分治法 ([divide-and-conquer](https://zh.wikipedia.org/zh-tw/%E5%88%86%E6%B2%BB%E6%B3%95)) - 有效率的處理大的資料 ## 複雜度分析 - 時間複雜度 - 最差: [ Big-O ]: O(n2) - 理想: [Big-omega]: O(n*log n) - 平均: [Big-theta]: O(n*log n) - 空間複雜度: O(n*log n) ## Is QuickSort stable? 其實由上面的時間複雜度就可以知道 QuickSort 是一個不穩定的排序方式。它的表現跟基準點的選擇有關,當你排序後所有element 都在基準點的同一側,也就是說你選擇的基準點在 array 裡是最大或最小的值, ## Is QuickSort In-place? >In-place: [原地演算法](https://zh.wikipedia.org/zh-tw/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95) 廣義來看 QuickSort 也算是原地演算法,一個原地演算法(in-place algorithm)基本上不需要額外輔助的資料結構,但允許少量額外的輔助變數來轉換資料的演算法。 ## 參考網站 - https://www.hackerearth.com/zh/practice/algorithms/sorting/quick--sort/tutorial/ - https://www.geeksforgeeks.org/quick-sort/ - https://www.studytonight.com/data-structures/quick-sort - https://www.youtube.com/watch?v=CB_NCoxzQnk # Quick-Sort by linked-List  ## 參考網站 https://www.geeksforgeeks.org/quicksort-on-singly-linked-list/
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up