6. 归并排序

归并排序:算法时间复杂度O(nlogn) 空间复杂度O(n)

算法实现
#include <iostream>

using namespace std;

void merge(int * a, int start, int mid, int end)
{
    int i = start, j = mid + 1;
    int m = mid, n = end;

    int tmp[20];
    int k = 0;
    while(i <= m && j <= n)
    {
        if(a[i] <= a[j])
            tmp[k++] = a[i++];
        else
            tmp[k++] = a[j++];
    }

    while(i <= m)
        tmp[k++] = a[i++];

    while(j <= n)
        tmp[k++] = a[j++];

    for(int i = 0; i < k; ++i)
        a[start+i] = tmp[i];
}

void mergeSort(int * a, int start, int end)
{
    if(start < end)
    {
        int mid = (start+end)/2;

        mergeSort(a, start, mid);
        mergeSort(a, mid+1, end);
        merge(a, start, mid, end);
    }
}

int main()
{
    int a[10] = {52,12,36,14,48,69,57,89,45,16};

    mergeSort(a, 0, 9);

    for(int i = 0; i < 10; ++i)
        cout << a[i] << " ";

    cout << endl;

    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,016评论 0 2
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,757评论 0 7
  • “你这里看起来还不错,比许多单身汉的家里干净多了。”柯洛随意地将手提包扔在沙发上,然后自己去冰箱翻吃的了。真是个不...
    纹烬阅读 2,548评论 0 0
  • 14:00--14:30 开场前拍照、集赞(需布置摄影区、准备Lumi圈圈大纸) 1欢迎各位炫酷的朋友们参加我们今...
    卓越nu陈秋婵阅读 2,312评论 0 1
  • 早餐:一碗饭,豆角,半碗麻酱面条 午餐:柳寅婚宴 晚餐:厂区手摘樱桃 运动:游泳1小时 感悟:无
    影子3623253阅读 695评论 0 0