經典算法--歸併排序

#include<iostream>
using namespace std;
/*歸併排序是一個穩定的排序,時間複雜度爲O(nlgn)*/
void Merge(int a[],int n,int b[],int m,int tmp[]){//合併已經排好序的數組
	int i=0,j=0,k=0;
	while(i<n&&j<m){
		if(a[i]<b[j])
			tmp[k++]=a[i++];
		else
			tmp[k++]=b[j++];
	}
	while(i<n)
		tmp[k++]=a[i++];
	while(j<m)
		tmp[k++]=b[j++];
	for(i=0;i<k;i++)
		a[i]=tmp[i];
}
void mergesort(int array[],int length,int *tmp){//排序
	if(length>1){
		int mid=length/2;
		mergesort(array,mid,tmp);
		mergesort(array+mid,length-mid,tmp);
		Merge(array,mid,array+mid,length-mid,tmp);
	}
}
void Msort(int array[],int length){
	int *p=new int[length];//輔助數組
	mergesort(array,length,p);
	delete p;
	return ;
}
int main(){
	int tmp[10];
	int q[10]={3,1,5,7,9,0,2,4,6,8};
	Msort(q,10);
	for(int i=0;i<10;i++)
		printf("%d ",q[i]);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章