美文网首页
归并排序

归并排序

作者: 狗尾巴草败了 | 来源:发表于2017-08-21 12:26 被阅读0次
#include <iostream>
using namespace std;
//将数组 a[low,mid] 与 a(mid,high] 合并(归并)
void Merge(int * a, int low, int mid, int high, int * temp)
{
    int i,j,k;
    i = low;
    j = mid + 1;//避免重复比较a[mid]
    k = 0;
    while (i <= mid && j <= high)//数组a[low,mid]与数组(mid,high]均没有全部归入数组temp中去
    {
        if(a[i] <= a[j])        //如果a[i]小于等于a[j]
            temp[k++] = a[i++]; //则将a[i]的值赋给temp[k],之后i,k各加一,表示后移一位
        else
            temp[k++] = a[j++]; //否则,将a[j]的值赋给temp[k],j,k各加一
    }
    while(i <= mid)             //表示数组a(mid,high]已经全部归入temp数组中去了,而数组a[low,mid]还有剩余
        temp[k++] = a[i++];     //将数组a[low,mid]剩下的值,逐一归入数组temp
    while(j <= high)           //表示数组a[low,mid]已经全部归入到temp数组中去了,而数组(mid,high]还有剩余
        temp[k++] = a[j++];     //将数组a(mid,high]剩下的值,逐一归入数组temp
    for (i = 0; i < k; i++)     //将归并后的数组的值逐一赋给数组a[low,high]
        a[low+i] = temp[i];     //注意,应从a[low+i]开始赋值
}
//二路归并(递归实现)
void MergeSort(int * a, int low, int high, int * temp)
{
    if (low < high)
    {
        int mid = (low + high)/2;
        MergeSort(a,low,mid,temp);      //左边有序
        MergeSort(a,mid+1,high,temp);   //右边有序
        Merge(a,low,mid,high,temp);     //再将两个有序序列合并
    }
}
/*----------测试代码----------*/
int main()
{
    int a[] = {2,23,34,43,45,6,7,8,5,4,56,78,80,211,222,444,111};
    int La = sizeof(a)/sizeof(a[0]);
    int * p = new int[La];
    MergeSort(a,0,La-1,p);
    for (int i = 0; i < La; i++)
    {
        cout<<a[i]<<' ';
    }
    cout<<endl;
    delete []p;
}

相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

  • 基于左闭右开的乱序数组归并排序 2020-04-24(未经允许,

    归并排序代码模板 递归形式思路:二分nums数组后对nums的归并排序 = 对左侧数组归并排序+对右侧数组归并排序...

网友评论

      本文标题:归并排序

      本文链接:https://www.haomeiwen.com/subject/gkucdxtx.html