天天看點

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

寫在前面:

大家好,我是時光。 今天給大家帶來的是排序算法中的快速排序。 我采用圖解方式講解,争取寫透徹。話不多說,開始!

思維導圖:

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

通過一趟排序将待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分别對這兩部分記錄繼續進行排序,以達到整個序列有序。主要采用<code>分治法</code>和<code>挖坑填數</code>等方法,分治法就是大問題分解成各個小問題,堆小問題求解,使得大問題得以解決。

我們先搞清楚這個堆排序思想,先把邏輯搞清楚,不着急寫代碼。

我們首先有一個無序數組,比方說

基準數(樞軸),取數組的第一個元素,此時基準數:arr[0]=4

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

并定義兩個變量i和j分别指向無序數組的第一個元素start和最後一個元素end。

分區過程,将比基準數大的數全放到它的右邊,比基準數小的或者相等的數全放到它的左邊。

我們首先把第一個元素arr[0]=4定義為基準元素,此時數組第一個位置就是坑,那麼我們要從數組的右邊向左開始查找小于基準數的元素,并與坑互換位置。

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

換好位置之後,現在轉換,從數組的左邊向右邊查找比基準數大的元素:

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

換好位置之後,現在又重新開始從數組右邊向左邊開始查找,比基準數小的元素:

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

不斷重複此類操作,直到分成左右兩個分區,再把基準數填入坑中,這樣第一趟排序完成。如下:

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

這裡,我們對分好的兩個區間重複進行上述分區操作,直到每個區間隻有一個元素為止。

❤️全面圖解快速排序,詳細圖文并茂解析!❤️

重複進行以上操作,直到左右兩邊分區都是有序排列,整個排序過程也就完成了:

快速排序最壞時間複雜度是<code>o(n^2)</code>,最好的時間複雜度為<code>o(nlogn)</code>,進而平均時間複雜度最後算出來也是<code>o(nlogn)</code>。

空間複雜度是<code>o(1)</code>,因為沒有用到額外開辟的集合空間。

快速排序是不穩定的排序算法。因為我們無法保證相等的資料按順序被掃描到和按順序存放。

最壞時間複雜度是<code>o(n^2)</code>,最好的時間複雜度為<code>o(nlogn)</code>,進而平均時間複雜度最後算出來也是<code>o(nlogn)</code>。

堆排序: 全面圖解堆排序 歸并排序:全面圖解歸并排序
連結清單: 數組和連結清單 順序表 單連結清單 棧: 棧的順序存儲, 棧的鍊式存儲 二叉樹: 二叉樹遞歸周遊 二叉樹非遞歸周遊 hashmap: hashmap資料結構詳解 java集合: arraylist詳解

繼續閱讀