【排序(C++实现)】:二分归并排序
生活随笔
收集整理的這篇文章主要介紹了
【排序(C++实现)】:二分归并排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、偽代碼
1.??????MergeSort(A,l,r)
2.??????Merge(A,l,m,r)?
?
?
?
二、C/C++代碼?
/*******************************************************************?
Function:Merge Description:將兩個有序的數組A[l,m]和A[m+1,r]合并為一個有序的數組 Input:數組A及下標l,m,r Output:有序數組A ********************************************************************/ void Merge(int A[],int l,int m,int r){int x = m-l+1,y=r-m;//x表示數組A[l...m]的長度,y表示數組A[m+1,r]的長度int *B = new int[x];int *C = new int[y];for(int i=0,j=l;i<x;i++,j++)//將A[l,m]復制到B中B[i]=A[j];for(int i=0,j=m+1;i<y;i++,j++)//將A[m+1,r]復制到C中C[i]=A[j];int i=0,j=0,k=l;//i是數組B的游標,j是數組C的游標,k是數組A的游標while(i<x&&j<y){if(B[i]<=C[j])A[k++]=B[i++];elseA[k++]=C[j++];}//如果B或者C中還有剩余的數字,則全部復制到A中if(i>=x)while(j<y)A[k++]=C[j++];elsewhile(i<x)A[k++]=B[i++]; } /************************************************ Function:MergeSort Description:對數組A[l,r]進行二分歸并排序 Input:數組A及其下標l,r Output:有序數組A *************************************************/ void MergeSort(int A[],int l,int r){if(l<r){int m = (l+r)/2;MergeSort(A,l,m);MergeSort(A,m+1,r);Merge(A,l,m,r);} }?
三、時間復雜度
?
由分治的思想知,對一個數組排序可以轉換為將原數組一分為二,各種排序后在合并的過程。設該算法的最壞時間復雜度為W(n),則遞推公式如下:
其中n-1是將兩個有序數組合并成一個有序數組的時間復雜度。
?
解法一:
?
解法二:
利用https://blog.csdn.net/bqw18744018044/article/details/79596014中介紹的主定理。
?
?
總結
以上是生活随笔為你收集整理的【排序(C++实现)】:二分归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql的连接查询
- 下一篇: w550官方例程_急!求索爱w550的刷