美文网首页
6. 归并排序

6. 归并排序

作者: 鬼谷神奇 | 来源:发表于2016-02-29 14:34 被阅读16次

归并排序:算法时间复杂度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;
}

相关文章

  • Java中排序方法整理

    1.插入排序: 2.shell排序 3.选择排序 4.堆排序 5.归并排序 6.快速排序

  • js几种排序方式

    1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.归并排序 6.快速排序

  • 高频的算法面试题(Java)

    1.冒泡排序 2.快速排序 3.归并排序 4.插入排序 5.选择排序 6.两数之和

  • 前端经典八大算法

    1. 冒泡排序 2. 插入排序 3. 快速排序 4. 归并排序 5. 希尔排序 6. 堆排序[https://ww...

  • 2020-08-21 算法合集

    1. 冒泡排序 2.选择排序 3. 插入排序 4. 希尔排序 5. 归并排序(递归实现) 6. 快速排序(递归实现...

  • 简单理解iOS7大排序算法

    1.插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序

  • 排序算法

    1. 冒泡排序 2.选择排序(每次选最小值的index) 3.插入排序 4.归并排序 5. 快速排序 6.计数排...

  • 排序问题

    1.冒泡排序 2.快速排序 3.选择排序 4.插入排序 5.希尔排序 6.桶排序 7.归并排序 8.堆排序 1.冒...

  • Java八大排序简述

    1.冒泡排序 改进版: 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.堆排序 7.归并排序 8.基数...

  • 排序算法总结及JS实现

    目录:1.冒泡排序2.选择排序3.插入排序4.归并排序5.快速排序6.堆排序 冒泡排序 冒泡排序比较任何两个相邻的...

网友评论

      本文标题:6. 归并排序

      本文链接:https://www.haomeiwen.com/subject/bregkttx.html