您好,登錄后才能下訂單哦!
這篇文章給大家介紹ACwing中怎么實現歸并排序,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; const int N=100010; int n; int a[N],t[N]; //歸并排序————分治的思想:左右兩段分別排序,再歸并。 //時間復雜度O(nlogn) void merge_sort(int a[],int l,int r){ //邊界 if(l>=r) return; //分治 排序 //確定一個分界點 int m=(l+r)>>1; //對左半邊排序 merge_sort(a,l,m); //對右半邊排序 merge_sort(a,m+1,r); //歸并 int i=l,j=m+1; int k=0; while(i<=m&&j<=r){ if(a[i]<=a[j]) t[k++]=a[i++]; else t[k++]=a[j++]; } //剩下的段補上 while(i<=m) t[k++]=a[i++]; while(j<=r) t[k++]=a[j++]; //搞回去 for(int i=l,j=0;i<=r;i++,j++) a[i]=t[j]; } int main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; merge_sort(a,0,n-1); for(int i=0;i<n;i++) cout<<t[i]<<' '; return 0; }
關于ACwing中怎么實現歸并排序就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。