#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]);
}
經典算法--歸併排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.