码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序模板

时间:2016-07-31 17:40:27      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#include <cstdio>

const int MAXN = 100002;
using namespace std;

int array[MAXN], array2[MAXN];
void Merge(int low, int high){
    int i = low;
    int mid = (low + high)/2;
    int j = mid+1;
    int k = low;

    while(i <= mid && j <= high){//比较两个数组,把其中最小的加进去
        if(array[i] <= array[j]){
            array2[k++] = array[i++];
        }else {
            array2[k++] = array[j++];
        }
    }
    while(i <= mid){//如果前者没有加完, 则把前面的数组里的数加进去
        array2[k++] = array[i++];
    }
    while(j <= high){//意义同上, 两者只会有一个数组有空余
        array2[k++] = array[j++];
    }
    for(int s = low; s <= high; s++){
        array[s] = array2[s];
    }
}
void MSort(int low, int high){//分治
    if(low == high){
        array2[low] = array[low];
    }else {
    int mid = (low + high) /2;
    MSort(low, mid);
    MSort(mid+1, high);
    Merge(low, high);//合并
    }
}
int main()
{
    for(int i = 0; i < 10; i++){
        array[i] = 10 - i;
        printf("%d ", array[i]);
    }
    printf("\n");
    MSort(0, 9);
    for(int i = 0; i < 10; i++){
        printf("%d ", array[i]);
    }
    return 0;
}

 

归并排序模板

标签:

原文地址:http://www.cnblogs.com/cshg/p/5723251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!