美文网首页
数据结构 - 归并排序

数据结构 - 归并排序

作者: nlpming | 来源:发表于2020-06-11 08:06 被阅读0次
归并排序 - 算法思路
image.png
归并排序 - 动图演示
归并排序算法.gif
时间复杂度
  • O(nlogn)
代码实现
  • printVector: 打印数组,需自己实现;
  • NOTE: vector没有分片初始化算法;
#include <iostream>
#include <vector>
#include "print.h"

using namespace std;

template <typename T>
vector<T> merge(vector<T> left, vector<T> right){
    vector<T> result;
    int i=0, j=0;

    while(i < left.size() && j < right.size()){
        if(left[i] < right[j]){
            result.push_back(left[i]);
            i ++;
        }else{
            result.push_back(right[j]);
            j ++;
        }
    }

    //剩余元素存入vector中
    while(i < left.size()){
        result.push_back(left[i]);
        i ++;
    }

    while(j < right.size()){
        result.push_back(right[j]);
        j ++;
    }
    return result;
}

/**
 * 归并排序
 * @tparam T
 * @param nums
 * @return
 */
template <typename T>
vector<T> mergeSort(vector<T> nums){

    if(nums.size() == 1)
        return nums;

    // 1. 每次二分数组
    int mid = nums.size()/2;
    vector<T> nums_left, nums_right;
    for(int i=0; i<nums.size(); i++){
        if(i < mid)
            nums_left.push_back(nums[i]);
        else
            nums_right.push_back(nums[i]);
    }

    // 2. 分别对左右两边进行排序
    vector<T> left = mergeSort(nums_left);
    vector<T> right = mergeSort(nums_right);
    
    // 3. 将排序好的数组left, right归并
    return merge(left, right);
}

int main(){

    vector<int> nums={1,4,5,3,2};

    printVector(nums);
    vector<int> nums_sorted = mergeSort(nums);
    printVector(nums_sorted);

    return 0;
}

参考资料

相关文章

  • 数据结构与算法--归并排序

    数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 2019-02-23 普林斯顿大学 数据结构课程笔记

    一、 数据结构:基本数据结构:栈、队列、背包、优先队列 排序:排序、归并排序、堆排序、基数排序 查找:二叉查找树、...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

  • 玩转算法面试:(三)LeetCode数组类问题

    数组中的问题其实最常见。 排序:选择排序;插入排序;归并排序;快速排序查找:二分查找法数据结构:栈;队列;堆…… ...

  • 算法(3)- 数组

    数组中的问题其实最常见如:排序(选择排序、插入排序、归并排序、快速排序)、查找(二分查找法)、数据结构(栈、队列、...

  • 排序算法

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

  • 排序二:归并、快排

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

  • java归并排序

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

网友评论

      本文标题:数据结构 - 归并排序

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