【计算机算法设计与分析】归并排序(C++_分治递归)

问题描述

归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
在这里插入图片描述

笔者内心OS

今晚准备算法期末考试地时候,突然发现自己没有写过归并排序…好像从大一开始一直都知道这个概念以及排序过程,但是从来没有自己实践过,这个以后得注意!

Code

#include<bits/stdc++.h>
using namespace std;
#define M 100
int n=9, x[M]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, y[M];
void Merge(int l, int m, int r){
    int i=l, j=m+1, k=l;
    while(i<=m&&j<=r){
        if(x[i]>x[j]){
            y[k++]=x[i++];
        }
        else{
            y[k++]=x[j++];
        }
    }
    while(i<=m){
        y[k++]=x[i++];
    }
    while(j<=r){
        y[k++]=x[j++];
    }
}
void Mergesort(int lef, int rig){
    if(lef<rig){
        int i=(rig+lef)/2;
        Mergesort(lef, i);
        Mergesort(i+1, rig);
        Merge(lef, i, rig);
        for(int i=lef; i<=rig; i++){
            x[i]=y[i];
        }
    }
}
int main()
{
    Mergesort(1, n);
    for(int i=1;i<=n;i++)
        cout<<x[i]<<" ";
    getchar();
    return 0;
}
posted @ 2020-11-20 00:59  ccql  阅读(5)  评论(0编辑  收藏  举报  来源