首页 > 编程语言 > 详细

归并排序

时间:2020-04-08 13:03:18      阅读:61      评论:0      收藏:0      [点我收藏+]

1.实现

#include <iostream>
#include <vector>

using namespace std;

template<class T>
void merge(vector<T>& a, int left, int mid, int right)
{
    vector<T> temp(right - left + 1);
    int left_begin = left;
    int right_begin = mid + 1;
    int i = 0;
    while (left_begin <= mid && right_begin <= right)
    {
        if (a[left_begin] < a[right_begin])
        {
            temp[i++] = a[left_begin++];
        }
        else
        {
            temp[i++] = a[right_begin++];

        }
    }
    while (left_begin <= mid)
    {
        temp[i++] = a[left_begin++];
    }
    while (right_begin <= right)
    {
        temp[i++] = a[right_begin++];
    }
    for (int i = left; i <= right; ++i)
    {
        a[i] = temp[i - left];
    }
}

template<class T>
void merge_sort(vector<T>& a, int begin, int end) 
{
    if (begin < end)
    {
        int mid = begin + (end - begin) / 2;
        merge_sort(a, begin, mid);
        merge_sort(a, mid + 1, end);
        merge(a, begin, mid, end);
    }
}


int main()
{
    vector<int>a{ 1,3,4,9,2,6,7,8 };
    merge_sort(a, 0, 7);
    for (auto i : a)
        cout << i << " ";
    cout << endl;
}

2.性能分析

稳定性:稳定

时间复杂度:O(n*logn)

空间复杂度:O(n)

最坏时间复杂度:O(n*logn)

 

归并排序

原文:https://www.cnblogs.com/qiang-wei/p/12658976.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!