美文网首页
MergeSort 归并排序

MergeSort 归并排序

作者: leon4ever | 来源:发表于2018-01-01 20:51 被阅读12次

ClassicalCode: mergeSort.cpp
直接分析大佬简洁的源码。

#include <vector>
#include <iostream>
using namespace std;

void merge(vector<int>& nums, int lo, int mid, int hi){
    vector<int> B(nums.begin() + lo, nums.begin()  + mid);//注意此处对vector初始化,vector大小为mid-lo
    int i = 0, j = mid;//i为B内的指针位置
    int k = lo;  //k为nums内的指针位置
    while(i < B.size() && j < hi){      //区间左闭右开  j < hi
        if(B[i] < nums[j]) nums[k++] = B[i++];
        else nums[k++] = nums[j++];
    }
    while(i < B.size()) nums[k++] = B[i++];
    //else 后半部分还有,但是已经就地了,无需处理,省去了赋值的操作
    return;
}


void mergeSort(vector<int> &nums, int lo, int hi){
    if(hi < lo + 2) return;
    int mid = lo + ((hi - lo) >> 1);  //大佬的除法必须用位运算
    mergeSort(nums, lo, mid);
    mergeSort(nums, mid, hi);  //注意,这区间也是左闭右开
    merge(nums, lo, mid, hi);
}


int main(){
    vector<int> nums{16,4,10,14,7,9,3,2,8,1};
    mergeSort(nums, 0, nums.size());

    for(int i = 0; i < nums.size(); i++){
        cout << nums[i] << " ";
    }
    cout << endl;

    return 0;
}

相关文章

  • 归并排序的递归实现与非递归实现

    归并排序 归并排序图 递归实现简介代码示例 mergesort(left,right,**a){ if(l...

  • 算法分析与设计复习

    1、排序算法 QuickSort 快速排序 MergeSort 归并排序 HeapSort 堆排序 BubbleS...

  • 排序算法(2):归并排序

     归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • python归并排序--递归实现

    归并排序: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • 排序算法-5--- 归并排序

    归并排序 Merge sort 1、概念 归并排序(英语:Merge sort,或mergesort),是创建在归...

  • 归并排序

    什么是归并排序? 归并排序(Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,...

  • python实现归并排序(MergeSort)

    python实现【归并排序】(MergeSort) 算法原理及介绍 归并排序的核心原理是采用分治法(Divide ...

  • 归并排序

    归并排序 归并排序(Mergesort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 时间复杂度为O(nlogn)的算法

    mergeSort 口诀: 左拆分,左合并,右拆分,右合并,最后合并左右。 归并排序的逻辑 归并排序的战略(宏观)...

网友评论

      本文标题:MergeSort 归并排序

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