排序算法之歸并排序-創(chuàng)新互聯(lián)

思想

歸并排序主要采取分治的思想,也可以說是遞歸的思想。

我們提供的服務有:網(wǎng)站設計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、建鄴ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的建鄴網(wǎng)站制作公司

在學習鏈表的時候,我們會遇到 如何將兩個有序表合并成一個有序表的問題,歸并排序就是類似地利用了這一個操作。

這里以 2-路歸 并為例:

提示:2-路歸并是最簡單也是最常見的一種歸并排序方式

想要排一個序列,可以將這個序列從中間分為左右兩個序列。

當左右兩個序列分別被排列成一個有序序列后,再合并為一個有序序列。

而想要排列左右兩個有序序列,則又可以將這兩個序列依次分為兩個序列,再進行排序后再合并。

注意:歸并排序并不是全部分好后合并,而是一邊先分好再合并,再另一邊分好再合并

不斷的重復操作后,可以將排序轉化為如何按序合并的問題。

圖示(來源于網(wǎng)絡):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ZqP6aOO54Gs6L-c5Y675Li2,size_20,color_FFFFFF,t_70,g_se,x_16

操作

歸并排序的思想轉化為操作就是遞歸合并了(這里是我常用的寫法):

#includeusing namespace std;
const int N = 1e6+10;	//序列大長度
int temp[N];	// 歸并排序需要用到一個臨時存儲數(shù)據(jù)的序列
int a[N];	//待排序序列

void Msort(int arr[],int left,int right){	// 歸并排序
    //遞歸邊界  歸并排序觸碰到遞歸邊界后,才開始真正的排序操作。
    if(left>=right) return;
    //折中拆分
    int mid=(left+right)/2;      //或寫成 mid = left+right>>1
    Msort(arr,left,mid);               //左邊
    Msort(arr,mid+1,right);         //右邊
    //有序合并	
    int k=left,i=left,j=mid+1;	//k輔助處理數(shù)據(jù) i相當于左指針 j相當于右指針
    while(i<=mid&&j<=right){	//從小到大排序
        if(arr[i]

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站題目:排序算法之歸并排序-創(chuàng)新互聯(lián)
標題來源:http://bm7419.com/article2/disdoc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航網(wǎng)站改版、做網(wǎng)站、App開發(fā)、網(wǎng)站收錄移動網(wǎng)站建設

廣告

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