归并排序

一、复杂度和稳定性

时间复杂度:平均,最好,最坏:O(N*ln(N))
空间复杂度:O(N)
稳定性:稳定

二、CPP实现

#include <vector>
using namespace std;
void merge(vector<int>& src, vector<int>& tmp, int s, int e, int m)
{
	int i = s, j = m + 1, k = s;
	while(i != m + 1 && j != e + 1)
	{
		if(src[i] < src[j])
			tmp[k++] = src[i];
		else
			tmp[k++] = src[j];
	}
	while(i != m + 1)
		tmp[k++] = src[i++];
	while(j != e + 1)
		tmp[k++] = src[j++]
	for(i = s; i != end; ++i)
		src[i] = tmp[i];
}
void merge_sort(vector<int>& src, vector<int>& tmp, int s, int e)
{
	int m = (s + e) >> 1;
	while(s < e)
	{
		merge_sort(src, tmp, s, m);
		merge_sort(src, tmp, m + 1, e);
		merge(src, tmp, s, e, m);
	}
}
int main(int argc, char* argv[])
{
	vector<int> arr = {1, 5, 6, 3, 3, 2, 1, 0};
	vector<int> tmp(arr.size(), 0);
	merge_sort(arr, tmp, 0, arr.size() - 1);
	return 0;
}
发布了24 篇原创文章 · 获赞 0 · 访问量 407
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览