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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【排序(C++实现)】:二分归并排序

發布時間:2023/12/9 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【排序(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++实现)】:二分归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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