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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理论基础 —— 排序 —— 快速排序

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 排序 —— 快速排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【概述】

快速排序是一種不穩定的排序方法,其同樣屬于交換排序,是對冒泡排序的一種改進:在冒泡排序中,記錄的比較與移動是在相鄰位置進行的,記錄每次交換只能后移一個位置,因而總的比較次數與移動次數較多;而在快速排序中,記錄的比較與移動是從兩端向中間進行的,關鍵碼較大的記錄一次就能從前面移動到后面,關鍵碼較小的記錄一次就能從后面移動到前面,由于記錄移動的距離較遠,從而減少了總的比較次數與移動次數。

【實現過程】

快速排序利用了分治策略,其基本思想是:首先選一個軸值,作為比較的基準,將待排序記錄劃分為獨立的兩部分,左側記錄均小于等于軸值,右側記錄均大于等于軸值,然后分別對這兩部分重復上述過程,直至序列有序。

顯然,快速排序是一個遞歸的過程,其具體的實現為:

  • 在待排序的 n 個記錄中任選一個進行記錄(通常選第一個),作為軸值
  • 進行分區,將所有比軸值小的元素放在軸值左邊,所有比軸值大的元素放在軸值的右邊,中間為所選的軸值
  • 對左右兩個分區遞歸進行步驟 1、2,遞歸結束條件是序列的大小是 1
  • ?

    【時空復雜度分析】

    快速排序是一種不穩定的排序方法,其最差時間復雜度為 O(n^2),最優時間復雜度為O(nlogn),平均時間復雜度為 O(nlogn)

    由于其是遞歸的,需要一個棧來存放每一層遞歸調用的必要信息,最大容量應與遞歸調用的深度一致,最優空間復雜度為 O(logn),最差空間復雜度為 O(n),平均空間復雜度為 O(logn)

    【源程序】

    1.一次劃分算法與遞歸實現

    設帶劃分的區間是 a[left]~a[right],具體的一次劃分算法如下:

    int partitoin(int a[],int left,int right){int pivotKey=a[left];//軸值int i=left,j=right;while(i<j){while(i<j&&a[j]>=pivotKey)//右側掃描j--;swap(a[i],a[j]);//比軸值小的交換到低端while(i<j&&a[i]<=pivotKey)//左側掃描i++;swap(a[i],a[j]);//比軸值大的交換到高端}return i;//返回軸值所在位置 }

    對待排序序列進行一次劃分后,再分別對左右兩個子序列進行快速排序,直到每個分區都只有一個記錄為止

    初始調用 quickSort(a,0,n-1) 即可

    void quickSort(int a[],int left,int right){if(left<right){int pivotKey=partitoin(a,left,right);//算出軸值并根據軸值進行分區quickSort(a,left,pivotKey-1);//低子表遞歸quickSort(a,pivotKey+1,right);//高子表遞歸} }

    ?2.綜合實現版

    將一次劃分與遞歸實現相結合,初始調用

    void quickSort(int a[],int left,int right){if(left>=right)return;int pivotKey=a[left];//軸值int i=left,j=right;while(i<j){while(i<j&&a[j]>=pivotKey)//從右向左掃描,找第一個碼值小于key的記錄,并交換到keyj--;a[i]=a[j];//賦給前面被拿走的a[i]while(i<j&&a[i]<=pivotKey)//從左向右掃描,找第一個碼值大于key的記錄,并交換到右邊i++;a[j]=a[i];//賦給前面被拿走的a[j]}a[i]=pivotKey;//分區元素放到正確位置quickSort(a,left,i-1);quickSort(a,i+1,right); }

    ?

    新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

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

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