c_cpp C ++中的合并排序算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C ++中的合并排序算法相关的知识,希望对你有一定的参考价值。

/*
* Merge Sort Algorithm
* Language: C++
* Created by: Harish R
*/

#include<iostream>
#include<stdlib.h>

using namespace std;

void merge(int *a, int *l, int nL, int *r, int nR)
{
    // int nL = sizeof(l)/sizeof(int);
    // int nR = sizeof(r)/sizeof(int);
    int i=0,j=0,k=0;
    while(i < nL && j < nR)
    {
        if(l[i] < r[j])
            a[k++] = l[i++];
        else
            a[k++] = r[j++];
    }
    while(i < nL)
    {
        a[k++] = l[i++];
    }
    while(j < nR)
    {
        a[k++] = r[j++];
    }
}

void mergesort(int *a, int len)
{
    if(len<2)
        return;
    int mid = len/2;
    int *left = (int *)malloc(mid*sizeof(int));
    int *right = (int *)malloc(sizeof(int)*(len-mid));
    for(int i=0;i<mid;i++)
        left[i] = a[i];
    for(int i=mid;i<len;i++)
        right[i-mid] = a[i];
    mergesort(left, mid);
    mergesort(right, len-mid);
    merge(a, left, mid, right, len-mid);
}

int main()
{
    int a[] = {2,4,1,6,8,5,3,7};
    cout <<"Original Array:" <<endl;
    for(int i=0;i<8;i++)
    	cout << a[i] << " ";
    cout <<endl;
    mergesort(a, 8);
    for(int i=0;i<8;i++)
        cout << a[i] <<" ";
    cout <<endl;
}

以上是关于c_cpp C ++中的合并排序算法的主要内容,如果未能解决你的问题,请参考以下文章

【Leetcode题目-03】数组排序算法题目

排序算法入门之归并排序(java实现)

算法之排序算法——桶排序

合并排序算法中的 C++“以 std::out_of_range:vector 类型的未捕获异常终止”错误

排序算法概念以及插入排序算法实现(C语言)

C语言中的排序算法--冒泡排序,选择排序,希尔排序