首页 > 编程语言 > 详细

归并排序

时间:2021-01-04 23:13:54      阅读:30      评论:0      收藏:0      [点我收藏+]
#include <iostream>
#include "iomanip"

using namespace std;

void merge(int a[] , int b[] ,int low , int mid , int high)
{
    int i , j , k;
    for(int k = low ; k <= high ; k++)
        b[k] = a[k];
    //因为在merge两个数组的时候,a[k++] = b[i++];
    //排好序的元素是放入a[]而不是更新b数组
    for(i = low , j = mid+1 , k = i ; i <= mid && j <= high ; k++)
    {
        if(b[i] <= b[j])
            a[k] = b[i++];
        else
            a[k] = b[j++];
    }
    while(i <= mid) a[k++] = b[i++];
    while(j <= high) a[k++] = b[j++];
}

void MergeSort(int a[] , int b[] , int low , int high)
{
    if(low < high)
    {
        int mid = (low + high)/2;//选取中间元素进行划分两个子序列
        MergeSort(a , b ,low , mid);
        MergeSort(a , b, mid+1 , high);
        merge(a , b ,low , mid , high);
    }
}

int main()
{
    int a[10] = {1,9,2,0,12,4,5,3,7,10};
    int b[10] = {1,9,2,0,12,4,5,3,7,10};
    MergeSort(a , b , 0 , 9);
    for(int i = 0 ; i < 10 ; i++)
        printf("%d ",a[i]);
}

 

归并排序

原文:https://www.cnblogs.com/AnOneBlog/p/14231623.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!