日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法——排序——快速排序图解动画

發布時間:2024/8/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法——排序——快速排序图解动画 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速排序

  • 簡介
  • 代碼示例
  • 排序過程
  • 時間復雜度
    • 最差時間復雜度
    • 最優時間復雜度 && 平均時間復雜度
  • 空間復雜度
  • 穩定性

簡介

????????快速排序是二分法排序。首先會選擇一個基準元素,然后將基準值和元素內其他元素進行比較。數組一輪遍歷后的結果為基準元素以外的元素分為[比基準值小]和[比基準值大]兩個類別。整體數組為[比基準值小]基準元素[比基準值大]的結構。
????????然后再對兩個[]中的元素進行排序,重復上述步驟,直到數組排序完成。

文章中使用的動畫網站地址,限 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

????????首先設置最右側的元素為基準元素,然后坑位定在左側第一個元素位置。坑位的作用是保證左側的元素都比基準元素小,右側的元素都比基準元素大。
????????順序遍歷數組中每一個元素比較基準元素和各個元素,比較分為倆種情況:
????????一:如果遍歷的元素比基準元素小,則交換坑位所處元素和當前遍歷的元素,坑位向右側移動一個位置。
????????二:如果遍歷元素比基準元素大,則無需交換位置。
????????最終遍歷一次數組后。保證坑位的左側都比基準元素小,右側都比基準元素大。

????????下圖1-1示例中。首先設置最右側29為基準元素。然后和35進行比較,35比基準元素29大,所以比較后只標記顏色即可。
????????然后基準元素29和第二個元素20進行比較。由于20比29小,所以將坑位所在元素35和20互換位置,然后坑位向右側移動1的位置。
????????基準元素29再比較第三個元素21。由于21比29小,所以將21和坑位所在元素35互換位置,然后坑位再向右側移動1的位置。保證坑位的左側數組的值都為比基準元素小,右側數組的值都比基準元素大,坑位的位置基本都為右側紫色子數組的第一個元素,。

圖1-1

????????遍歷一輪數組后,保證坑位位置的左側都比基準元素29小,坑位位置的右側都比基準元素29大。然后將基準元素和坑位元素交換位置。

????????下圖1-2示例中。當前數組最后遍歷14的元素,由于14的元素比基準元素小,所以將14的比較元素和坑位所在元素進行位置互換,然后將坑位向右移動。
????????遍歷數組后,將基準元素29和坑位所在元素進行互換位置,則一輪的比較結束。然后再分別對兩個子數組中的元素進行排序,重復上述步驟,直到數組排序完成。
????????快速排序通過遍歷元素和基準元素進行比較,找到能夠將數組一份為2的位置(坑位)。然后再交換坑位和基準元素的位置,將數組一分為二。最后再遞歸子數組。直到數組都完成排序。

圖1-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所示:

圖1-3

最優時間復雜度 && 平均時間復雜度

????????最好的情況的時間復雜度為N * log2N。每次分區都很均勻。即數組能被二分分割。然后子元素再進行比較。
????????首先基準元素需要和各個元素進行比較,此過程對應的時間復雜度為N。
????????其次由于分區很均勻。 所以數組能被二分法分割,分割后,可同時對分割后子元素進行處理,對應的時間復雜度log2N。
????????所以總的時間復雜度為 N * log2N。

空間復雜度

快速排序需要一個棧空間來實現遞歸。最好的情況下,即快速排序的每一趟排序都將元素序列均勻地分割成長度相近的兩個子表,所需棧的最大深度為log2(n+1);但最壞的情況下,棧的最大深度為n。這樣,快速排序的空間復雜度為O(log2n)

穩定性

快速排序為不穩定排序,因為當基準元素和另外一個元素數值相同時,基準元素再和各個元素比較后可能變化位置。所以為不穩定排序。 例如 4,5,6,5
如下圖1-3所示:

圖1-4

總結

以上是生活随笔為你收集整理的算法——排序——快速排序图解动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。