美文网首页
归并排序 — C++实现

归并排序 — C++实现

作者: 奇点创客 | 来源:发表于2019-07-28 10:45 被阅读0次

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n\logn)}(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。


#include <iostream>

using namespace std;

void merge(int a[], int begin, int mid, int end);
void merge_sort(int a[], int begin, int end);

int main()
{
    int arr[9] = { 5, 2, 7, 1, 9, 3, 2, 4, 6 };

    for (auto i : arr)
        cout << i << " ";
    cout << endl;

    merge_sort(arr, 0, 8);

    for (auto i : arr)
        cout << i << " ";
    cout << endl;
}

void merge(int a[], int begin, int mid, int end)
{
    int n1 = mid - begin + 1;
    int n2 = end - mid;
    int* L = new int[n1];
    int* R = new int[n2];
    for (int i = 0; i < n1; i++)
        L[i] = a[begin + i];
    for (int j = 0; j < n2; j++)
        R[j] = a[mid + 1 + j ];

    int i = 0, j = 0;
    for (int k = begin; k < end + 1; k++) {
        if (i > n1 - 1) {
            a[k] = R[j];
            j++;
        }else if (j > n2 - 1) {
            a[k] = L[i];
            i++;
        }else if (L[i] <= R[j]) {
            a[k] = L[i];
            i++;
        }else {
            a[k] = R[j];
            j++;
        }
    }
    delete []L;
    delete []R;
}

void merge_sort(int a[], int begin, int end)
{
    if (begin < end) {
        int mid = (end + begin) / 2;
        merge_sort(a, begin, mid);
        merge_sort(a, mid+1, end);
        merge(a, begin, mid, end);
    }
}

注:本实现未使用哨兵项

相关文章

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 各种排序算法实现

    C++实现各种排序算法。上张图。 自定义的swap函数。 冒泡排序 插入排序 希尔排序 选择排序 快速排序 归并排...

  • Javascript和归并排序

    Javascript和归并排序 这里以递归为例,参考自慕课网刘波波老师的C++版本实现 普通归并(自上而下) 普通...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 归并排序&快速排序

    归并排序 利用归并的思想实现排序方法,该算法采用经典的分治策略,分而治之。 代码实现 基础设置 归并排序 —— 非...

  • 常见排序算法总结(程序员必会)

    看了总结图,我这里就总结一下 直接插入排序,冒泡排序,快速排序,堆排序和归并排序,使用C++实现 重新画了总结图 ...

  • 算法

    分类 排序 希尔排序 代码实现 归并排序 代码实现 查找

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

网友评论

      本文标题:归并排序 — C++实现

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