递归实现归并排序


 1 /*************************************************************************
 2     > File Name: merge_sort.cpp
 3     > Author:
 4     > Description: 
 5     > Created Time: Sun 26 Jul 2015 10:15:24 AM HKT
 6  ************************************************************************/
 7 
 8 #include<iostream>
 9 using namespace std;
10 
11 void merge(int a[],int tmp[],int lPos,int rPos,int rEnd)
12 {
13     int numElements=rEnd-lPos+1;// 计算元素个数
14     int lEnd=rPos-1;
15     int tmpPos=lPos;
16     while(lPos<=lEnd && rPos<=rEnd)
17     {
18         if(a[lPos]<=a[rPos])
19             tmp[tmpPos++]=a[lPos++];
20         else
21             tmp[tmpPos++]=a[rPos++];
22     }
23 
24     //到这里左端或右端可能还有剩余元素
25     while(lPos<=lEnd)
26         tmp[tmpPos++]=a[lPos++];
27     while(rPos<=rEnd)
28         tmp[tmpPos++]=a[rPos++];
29 
30     for(int i=0;i<numElements;i++)
31     {
32         a[rEnd]=tmp[rEnd--];
33     }
34 }
35 
36 void msort(int a[],int tmp[],int low,int high)
37 {
38     if(low>=high)
39         return;
40     int middle=(low+high)/2;
41     msort(a,tmp,low,middle);
42     msort(a,tmp,middle+1,high);
43     merge(a,tmp,low,middle+1,high);
44 }
45 
46 void merge_sort(int a[],int len)
47 {
48     int *tmp=new int[len];
49     if(tmp !=NULL)
50     {
51         msort(a,tmp,0,len-1);
52         delete []tmp;
53     }
54 }
55 int main()
56 {
57     int a[]={1,4,7,6,3,8,2,5};
58     merge_sort(a,8);
59     for(int i=0;i<8;i++)
60     {
61         cout<<a[i]<<" ";
62     }
63     cout<<endl;
64 
65     return 0;
66 }
View Code

优质内容筛选与推荐>>
1、用selenium自动填写调查问卷
2、Object类,Object类中的常用方法
3、生成器表达式 (重点)
4、工厂方法模式-Factory Method
5、微信小程序引入weui


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn