算法——排序——快速排序图解动画
快速排序
- 簡介
- 代碼示例
- 排序過程
- 時間復雜度
- 最差時間復雜度
- 最優時間復雜度 && 平均時間復雜度
- 空間復雜度
- 穩定性
簡介
????????快速排序是二分法排序。首先會選擇一個基準元素,然后將基準值和元素內其他元素進行比較。數組一輪遍歷后的結果為基準元素以外的元素分為[比基準值小]和[比基準值大]兩個類別。整體數組為[比基準值小]基準元素[比基準值大]的結構。
????????然后再對兩個[]中的元素進行排序,重復上述步驟,直到數組排序完成。
文章中使用的動畫網站地址,限 pc: 排序算法動畫
http://www.donghuasuanfa.com/sort
代碼示例
偽代碼來自維基百科
algorithm quicksort(A, lo, hi) isif lo < hi thenp := partition(A, lo, hi)quicksort(A, lo, p)quicksort(A, p + 1, hi)algorithm partition(A, lo, hi) ispivot := A[ floor((hi + lo) / 2) ]i := lo - 1j := hi + 1loop foreverdoi := i + 1while A[i] < pivotdoj := j - 1while A[j] > pivotif i ≥ j thenreturn jswap A[i] with A[j]排序過程
????????排序算法動畫地址 http://www.donghuasuanfa.com/sort
????????首先設置最右側的元素為基準元素,然后坑位定在左側第一個元素位置??游坏淖饔檬潜WC左側的元素都比基準元素小,右側的元素都比基準元素大。
????????順序遍歷數組中每一個元素比較基準元素和各個元素,比較分為倆種情況:
????????一:如果遍歷的元素比基準元素小,則交換坑位所處元素和當前遍歷的元素,坑位向右側移動一個位置。
????????二:如果遍歷元素比基準元素大,則無需交換位置。
????????最終遍歷一次數組后。保證坑位的左側都比基準元素小,右側都比基準元素大。
????????下圖1-1示例中。首先設置最右側29為基準元素。然后和35進行比較,35比基準元素29大,所以比較后只標記顏色即可。
????????然后基準元素29和第二個元素20進行比較。由于20比29小,所以將坑位所在元素35和20互換位置,然后坑位向右側移動1的位置。
????????基準元素29再比較第三個元素21。由于21比29小,所以將21和坑位所在元素35互換位置,然后坑位再向右側移動1的位置。保證坑位的左側數組的值都為比基準元素小,右側數組的值都比基準元素大,坑位的位置基本都為右側紫色子數組的第一個元素,。
????????遍歷一輪數組后,保證坑位位置的左側都比基準元素29小,坑位位置的右側都比基準元素29大。然后將基準元素和坑位元素交換位置。
????????下圖1-2示例中。當前數組最后遍歷14的元素,由于14的元素比基準元素小,所以將14的比較元素和坑位所在元素進行位置互換,然后將坑位向右移動。
????????遍歷數組后,將基準元素29和坑位所在元素進行互換位置,則一輪的比較結束。然后再分別對兩個子數組中的元素進行排序,重復上述步驟,直到數組排序完成。
????????快速排序通過遍歷元素和基準元素進行比較,找到能夠將數組一份為2的位置(坑位)。然后再交換坑位和基準元素的位置,將數組一分為二。最后再遞歸子數組。直到數組都完成排序。
時間復雜度
| O(N2)O(N^2) O(N2) | O(N?log2N)O(N*log_{2}N) O(N?log2?N) | O(N?log2N)O(N*log_{2}N)O(N?log2?N) |
最差時間復雜度
????????最差的情況是O(N2),每次分區的結果都是一側全量數據,一側無數據。則每次基準元素都要和數組內各個元素進行比較,且比較后無法將數組二等分。然后下一輪基準元素還是和數組內各個元素進行比較。所以時間復雜度為O(N2)。例:1,2,3,4。快速排序將退化為冒泡排序。
如下圖1-3所示:
最優時間復雜度 && 平均時間復雜度
????????最好的情況的時間復雜度為N * log2N。每次分區都很均勻。即數組能被二分分割。然后子元素再進行比較。
????????首先基準元素需要和各個元素進行比較,此過程對應的時間復雜度為N。
????????其次由于分區很均勻。 所以數組能被二分法分割,分割后,可同時對分割后子元素進行處理,對應的時間復雜度log2N。
????????所以總的時間復雜度為 N * log2N。
空間復雜度
快速排序需要一個??臻g來實現遞歸。最好的情況下,即快速排序的每一趟排序都將元素序列均勻地分割成長度相近的兩個子表,所需棧的最大深度為log2(n+1);但最壞的情況下,棧的最大深度為n。這樣,快速排序的空間復雜度為O(log2n)
穩定性
快速排序為不穩定排序,因為當基準元素和另外一個元素數值相同時,基準元素再和各個元素比較后可能變化位置。所以為不穩定排序。 例如 4,5,6,5
如下圖1-3所示:
總結
以上是生活随笔為你收集整理的算法——排序——快速排序图解动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Log4j日志决战
- 下一篇: 同济版《线性代数》引发激烈争议!