美文网首页
七大排序之归并排序

七大排序之归并排序

作者: 里里角 | 来源:发表于2018-08-12 21:11 被阅读8次

<MergeSort>
效率分析:设数列长为N,将数列分开成小数列一共要logn步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(n),故一共为O(nlogn)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(nlogn)的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的。

/*秩都从0开始*/
void MergeSort(int *A,int lo,int hi)
{
    if(hi-lo<1) return;//区间内只有一个元素,必然有序
    int mi=(lo+hi)/2;//以中点为界
    MergeSort(A,lo,mi);//对前半段排序
    MergeSort(A,mi+1,hi);//对后半段排序
    Merge(A,lo,mi,hi);//归并
}

void Merge(int A[],int lo,int mi,int hi)
{
    int lb=mi-lo+1;
    int lc=hi-mi;

    int *B=new int[lb];   //为前子序列分配空间
    for(int i=0;i<lb;i++)  //把A中元素复制到B
        B[i]=A[lo+i];
    int *C=A+mi+1;   //C直接利用A的空间

    for(int i=lo,j=0,k=0;j<lb || k<lc;){
        if ( ( j < lb ) && ( ! ( k < lc ) || ( B[j] <= C[k] ) ) ) A[i++] = B[j++];
//利用||的短路特性,既保证了k未越界,同时比较了B、C元素
        if ( ( k < lc ) && ( ! ( j < lb ) || ( C[k] <  B[j] ) ) ) A[i++] = C[k++];
    }
    delete []B;
}

相关文章

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 归并排序

    来源:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 归并排序(MERGE-SORT...

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 排序算法

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

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 排序二:归并、快排

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

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

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

  • 常见的排序算法(2)

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

  • Datawhale | 编程第6期 Test 3

    排序 1.实现归并排序、快速排序、插入排序、冒泡排序、选择排序、堆排序(选做) 归并排序 快速排序 插入排序 冒泡...

  • php-归并排序、快速排序、堆排序

    归并排序、快速排序、堆排序 时间复杂度 O(nlogn) 归并排序 快速排序(快排) 堆排序

网友评论

      本文标题:七大排序之归并排序

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