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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 今天講解一下快速排序算法的原理以及實現、復雜度和穩定性分析與優化


目錄

    • 1 快速排序的原理
    • 2 快速排序代碼實現
    • 3 復雜度和穩定性分析、優化
    • 4 習題練習


1 快速排序的原理

快速排序是所有內部排序算法中平均性能最優的排序算法

快速排序是對冒泡排序算法的一種改進

快速排序由C. A. R. Hoare在1960年提出。
它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列

快速排序的基本思想是基于分治法

在待排序表L[1…n]中任取一個元素pivot作為樞軸(或基準,通常取首元素)

也就是常見的 固定位置選取基準

通過一趟排序將待排序表劃分為獨立的兩部分L[1…k-1]和L[k+1…n]

使得L[1…k-1]中的所有元素小于pivot

L[k+1.n]中的所有元素大于等于pivot

則pivot放在了其最終位置L(k)上

這個過程稱為一趟快速排序(或一次劃分)

然后分別遞歸地對兩個子表重復上述過程,直至每部分內只有一個元素或空為止,即所有元素放在了其最終位置上。

一趟快速排序的過程是一個交替搜索和交換的過程

常見方法就是 挖坑法

不過需要注意:

如果選擇 第一個數組元素為基準時,必須先 從后向前進行

如果選擇 最后一個數組元素為基準時,必須先 從前向后進行

挖坑法的流程:


2 快速排序代碼實現

首先寫好劃分操作算法,然后遞歸調用~

// 每一次的 劃分操作 int Partition(int *arr, int left, int right) {int i = left;int j = right;// 固定位置選取基準 選第一個 int k = arr[left]; while (i < j){while(i < j && arr[j] >= k) {j--;}arr[i] = arr[j];while(i < j && arr[i] <= k) {i++;}arr[j] = arr[i];}arr[i] = k;return i; }// 遞歸調用 實現快速排序 void QuickSort(int *arr,int low,int high) {int k = Partition(arr,low,high);if(low < k-1){QuickSort(arr,low,k-1);}if(high > k+1){QuickSort(arr,k+1,high);} }

示例:

int arr[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};


3 復雜度和穩定性分析、優化

① 空間復雜度

由于快速排序是遞歸的,需要借助一個遞歸工作棧來保存每層遞歸調用的必要信息,其容量應與遞歸調用的最大深度一致。

最好情況下為 O(log2n)

最壞情況下 O(n) ;因為要進行n-1 次遞歸調用

平均情況下,棧的深度為 O(log2n)


② 時間復雜度

快速排序的運行時間劃分是否對稱有關

最壞情況發生在初始排序表基本有序或基本逆序時,時間復雜度為 O(n)

最好的情況,每一次劃分都很均衡,時間復雜度為 O(nlog2n)


③ 優化:提高算法效率

一種方法是盡量選取一個可以將數據中分的樞軸元素

三分取中法選取基準:從序列的頭尾及中間選取三個元素,再取這三個元素的中間值作為最終的樞軸元素;

隨機選擇基準:隨機地從當前表中選取樞軸元素

這樣做可使得最壞情況在實際排序中幾乎不會發生。

④ 穩定性

一種情況是,右端區間有兩個關鍵字相同,且均小于基準值,則交換到左端區間后,它們的相對位置(不是絕對位置)會發生變化

所以快速排序是一種不穩定的排序方法


4 習題練習

總結

以上是生活随笔為你收集整理的排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化的全部內容,希望文章能夠幫你解決所遇到的問題。

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