c++ 归并排序

来源:互联网 发布:关于所有淘宝软件 编辑:程序博客网 时间:2024/06/05 05:36
/*归并排序(从小到大)把数组分为两部分,分别对两个部分排序后进行合并,对两个部分排序时,把每个部分又分为两个部分...(递归)合并:假设A、B为两堆面朝上的扑克牌,A、B均是小牌在上大牌在下每次从A、B的顶层牌中取出较小的,如果其中一堆牌取完了,把另一堆剩下的牌一次性取出*/
<pre name="code" class="cpp">#include<iostream>using namespace std;void merge(int a[],int left,int p,int right){int tt=0;int b[10];int i=left,j=p+1;int n=right-left+1;while(tt<n){if(a[i]<a[j]){b[tt++]=a[i++];}else {b[tt++]=a[j++];}if(i==p+1){            for(;j<=right;j++)                b[tt++]=a[j];}if(j==right+1){            for(;i<=p;i++)                b[tt++]=a[i];}}j=0;for(i=left;i<=right;i++)        a[i]=b[j++];}void mergeSort(int a[],int left,int right){if(right==left){        //cout<<"hello"<<right<<endl;return ;}int p=(left+right)/2;mergeSort(a,left,p);mergeSort(a,p+1,right);merge(a,left,p,right);}int main(){int a[10]={1,4,2,3,6,5,10,9,7,8};//int a[5]={5,4,1,90,3};mergeSort(a,0,9);    for(int i=0;i<10;i++)        cout<<a[i]<<' ';    cout<<endl;    return 0;}

运行结果:
1 2 3 4 5 6 7 8 9 10
                                             
0 0
原创粉丝点击