算法解析之归并排序

归并排序

算法思路:
1、将整个序列递归分解为不可分解的单元素序列,这时各个单元素序列有序(递推过程)
2、再将各个单元素序列二路归并(回归过程)

C++:

template <typename T>
void merge(T arr[],int low,int mid,int high){
    //复制到一个临时数组
    T temp[high - low + 1];
    for (int i = low; i <= high; i++) {
        temp[i-low] = arr[i];
    }
    //i和j分别指示两个有序序列的开始
    int i = 0,j = mid + 1 - low;

    //挑出小的归并到arr,同时移动索引,从临时数组中往arr中复制
    for (int k = low; k <= high; k++) {
        //保证索引有效性
        if (i > mid - low) {
            arr[k] = temp[j++];
        }else if (j > high - low){
            arr[k] = temp[i++];
        }else if (temp[i]<temp[j]) {
            arr[k] = temp[i++];
        }else{
            arr[k] = temp[j++];
        }
    }
}
//归并排序
template <typename T>
void mergeSort(T arr[],int low,int high){
    if (high>low) {
        int mid = low + (high - low)/2;
        mergeSort(arr, low, mid);
        mergeSort(arr, mid+1, high);
        merge(arr, low, mid, high);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 2,641评论 0 40
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,571评论 1 4
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,301评论 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,352评论 0 2
  • 第六章 断 “什么?一个怪物的叫声?”诺克萨斯行军营中,一个身着黑色长袍的人形站在前方,德莱厄斯则站立在下方。 很...
    枉算尽谁的心机阅读 351评论 0 0

友情链接更多精彩内容