归并排序
1) 把前一半排序
2) 把后一半排序
3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。
每一个子过程都进行归并排序,整体用分治的思想(递归实现)
时间复杂度为O(nlogn)
是最快的排序算法!
/*
函数mergeayyar()是归并排序算法
函数mergesort()是对每个子过程进行归并排序,最后合并成最终的数组
此算法理解分治的思想不难,关键是搞清楚递归是如何实现分治的
也是此类算法的关键
*/
#include<iostream>
using namespace std;
//归并
void mergearray(int a[],int first,int mid,int end,int temp[]){
int i=0,j=0,k=0,m=0,n=0;
i=first;
j=mid+1;
n=mid;
while(i<=n&&j<=end){
if(a[i]<a[j]){
temp[k]=a[i];
i++;
}else{
temp[k]=