经典算法--归并排序

来源:互联网 发布:阿基拉和拼字比赛 知乎 编辑:程序博客网 时间:2024/05/16 08:01
#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++];elsetmp[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]);}

0 0
原创粉丝点击