ACwing中怎么實現(xiàn)歸并排序

這篇文章給大家介紹ACwing中怎么實現(xiàn)歸并排序,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在吳忠等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站設計制作、成都網(wǎng)站建設 網(wǎng)站設計制作按需定制制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站建設,網(wǎng)絡營銷推廣,外貿(mào)網(wǎng)站制作,吳忠網(wǎng)站建設費用合理。

#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中怎么實現(xiàn)歸并排序就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞標題:ACwing中怎么實現(xiàn)歸并排序
文章分享:http://bm7419.com/article6/gejcig.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄、小程序開發(fā)企業(yè)建站、服務器托管、響應式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站