归并排序
基本思想:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
实例演示
代码实现
#include<iostream>
using namespace std;
#include<vector>
void _MergeSort(vector<int>& a,int begin,int end,vector<int>& tmp)
{
if(begin>=end)
return;
int mid=(begin+end)>>1;
_MergeSort(a,begin,mid,tmp);
_MergeSort(a,mid+1,end,tmp);
int begin1=begin,end1=mid;
int begin2=mid+1,end2=end;
int index=begin;
while(begin1<=end1&&begin2<=end2)
{
if(a[begin1]<a[begin2])
tmp[index++]=a[begin1++];
else
tmp[index++]=a[begin2++];
}
if(begin1<=end1)
{
while(begin1<=end1)
tmp[index++]=a[begin1++];
}
if(begin2<=end2)
{
while(begin2<=end2)
tmp[index++]=a[begin2++];
}
a=tmp;
}
void MergeSort(vector<int>& a,int n)
{
vector<int> tmp(a);
_MergeSort(a,0,n-1,tmp);
}
int main()
{
int n;
cin >> n;
vector<int> a;
while (n--)
{
int k;
cin >> k;
a.push_back(k);
}
MergeSort(a, a.size());
for (auto e : a)
{
cout << e << " ";
}
system("pause");
return 0;
}
结果展示
归并排序的特性总结:
- 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
- 时间复杂度:O(N*logN)
- 空间复杂度:O(N)
- 稳定性:稳定