归并排序

原创 2016年06月01日 16:58:51

1.归并排序的概念

  • 将待排序元素分成两个区间,用递归思想将两个区间进行排序。
  • 将 两个排好的有序区间的元素进行合并。

2.归并排序的思想

  • 分治思想
  • 递归思想(区间的不断缩小)

3.归并排序的的实现


3.1先从简单的合并开始

//将有序数组a[]和b[]合并到c[]中  
void MemeryArray(int a[], int n, int b[], int m, int c[])  
{  
    int i, j, k;  

    i = j = k = 0;  
    while (i < n && j < m)  
    {  
        if (a[i] < b[j])  
            c[k++] = a[i++];  
        else  
            c[k++] = b[j++];   
    }  

    while (i < n)  
        c[k++] = a[i++];  

    while (j < m)  
        c[k++] = b[j++];  
} 

3.2 类比上面,然后已经分出来的区间进行合并

void mergearray(int a[], int first, int mid, int last, int temp[])  
{  
    int i = first, j = mid + 1;  
    int m = mid,   n = last;  
    int k = 0;  

    while (i <= m && j <= n)  
    {  
        if (a[i] <= a[j])  
            temp[k++] = a[i++];  
        else  
            temp[k++] = a[j++];  
    }  

    while (i <= m)  
        temp[k++] = a[i++];  

    while (j <= n)  
        temp[k++] = a[j++];  

    for (i = 0; i < k; i++)  
        a[first + i] = temp[i];  
} 

3.3 对整个待排序元素进行分割,然后合并。

void mergesort(int a[], int first, int last, int temp[])  
{  
    if (first < last)  
    {  
        int mid = (first + last) / 2;  
        mergesort(a, first, mid, temp);    //左边有序  
        mergesort(a, mid + 1, last, temp); //右边有序  
        mergearray(a, first, mid, last, temp); //再将二个有序数列合并  
    }  
}  

3.4 主函数,以及待排序元素的输入解决

bool MergeSort(int a[], int n)  
{  
    int *p = new int[n];  //int *p =(int *) malloc(sizeof(int)*n);
    if (p == NULL)  
        return false;  
    mergesort(a, 0, n - 1, p);  
    delete[] p;  
    return true;  
}  

参考

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构归并排序问题

  • 2017年07月17日 20:23
  • 3KB
  • 下载

二路归并排序

  • 2015年06月06日 23:21
  • 38KB
  • 下载

数组和链表的归并排序算法实现(C语言)

数组和链表的归并排序算法实现(C语言)
  • zwhlxl
  • zwhlxl
  • 2015年03月05日 21:11
  • 2591

递归归并排序算法

  • 2017年11月02日 22:33
  • 2KB
  • 下载

归并排序算法

  • 2013年10月27日 09:56
  • 5KB
  • 下载

归并排序算法(递归实现)

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种...

归并排序算法代码实现

  • 2012年11月15日 19:20
  • 2KB
  • 下载

归并排序(C++语言描述)

  • 2013年11月09日 15:54
  • 1KB
  • 下载

归并排序求逆序对数 (附另两种姿势BIT 线段树)

求逆序数 三种方法 归并排序 树状数组 线段树 交换次数即为逆序对数 poj1804数据范围小,int不会溢出,spoj上提价需用long long(注册spoj时,获取验证码时会访问谷歌,所以需要…...

归并排序动画可运行jar

  • 2013年04月27日 18:45
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:归并排序
举报原因:
原因补充:

(最多只允许输入30个字)