第七章快速排序之“快速插入排序”(練習7.4-5)

來源:互聯網
上載者:User

O(∩_∩)O~,這個名字乍聽起來比較黃。其實就是先快速排序進行劃分,等劃分小到一定規模比如k時,進行插入排序,因為規模小到一定程度,插入排序的效率更高。我在前面還寫過一個合并插入排序的演算法,思想跟這個相似。

總的時間複雜度為O(nk+nlg(n/k)),這個很好證明:
先進行二分,劃分到規模都為K時停止劃分,此時深度為h,則T(n/2^h)=k,則h=lg(n/k),最底層規模為K的分葉節點數目為2^lg(n/k)=n/k,每個k內部插入排序,最壞情況為O(k^2),則總的插入排序時間為(n/k)*(k^2)=nk。每一層的劃分耗費為n,一共需劃分lg(n/k)層,耗費為O(nlg(n/k))。則總的時間複雜度是兩者相加共O(nk+nlg(n/k))。

代碼如下:

#include <string.h>#include <time.h>#define BUFFER_SIZE 10int Partition(int *a,int p,int r){int i=0;int j=0;int tmp=0;int x=0;i=p-1;x=a[r];for(j=p;j<r;j++){if(a[j]<=x){i++;tmp=a[i];a[i]=a[j];a[j]=tmp;}}tmp=a[i+1];a[i+1]=a[r];a[r]=tmp;return i+1;}int RandomPartition(int *a,int p,int r){int i=0;int tmp=0;srand((unsigned)time(NULL));i=rand()%(r-p+1)+p;tmp=a[i];a[i]=a[r];a[r]=tmp;return Partition(a,p,r);}void InsertionSort(int *a,int p,int r){int n=r-p+1;int b[n];int i=0;int j=0;b[0]=a[p];for(j=p+1;j<=r;j++){i=j-1;while(i>=0&&a[j]<=b[i]){b[i+1]=b[i];i--;}b[i+1]=a[j];}for(j=p,i=0;j<=r;j++){a[j]=b[i];i++;}}void RandomQuickSort(int *a,int p,int r,int k){int q=0;if(p>=r){return;}if(r-p+1<k){InsertionSort(a,p,r);}else{q=RandomPartition(a,p,r);RandomQuickSort(a,p,q-1,k);RandomQuickSort(a,q+1,r,k);}}int main(){int i=0;int j=0;int a[BUFFER_SIZE]; //隨機產生數組 srand((unsigned)time(NULL));for(j=0;j<BUFFER_SIZE;j++){a[j]=rand()%100;} printf("隨機產生的數組:\n");for(i=0;i<BUFFER_SIZE;i++){printf("%d ",a[i]);} printf("\n");RandomQuickSort(a,0,BUFFER_SIZE-1,1);printf("對數組進行快速插入排序:\n"); for(i=0;i<BUFFER_SIZE;i++){printf("%d ",a[i]);}system("pause");return 0;} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.