合并排序

合并排序的主要功能是将两个已经排好序的数组合并成一个有序的大数组。合并的算法思想为:每次取两个数组中最小的(或者最大的)加入到新数组中。

合并排序算法的C++递归代码:

void merge_sort(int array_data[], int array_start_index, int array_end_index)
{
    if(
array_start_index < array_end_index )
    {
        int q = (
array_start_index + array_end_index ) / 2;
       
        merge_sort(array_data,
array_start_index , q);
        merge_sort(array_data, q+1,
array_end_index );
        merge_two_subarray(array_data,
array_start_index , q, array_end_index );
    }
}

 

void merge_two_subarray(int array_data[], int array1_start_index, int array1_end_index, int array2_end_index)
{
    int array1Len = array1_end_index - array1_start_index + 1;
    int array2Len = array2_end_index - array1_end_index;

    int *array1Data = new int[array1Len];
    int *array2Data = new int[array2Len];

    int *pa1;
    int *pa2;

    pa1 = array1Data;
    pa2 = array2Data;

    int i = 0;
    int j = 0;

    for(i = 0; i < array1Len; i++)
        *pa1++ = array_data[array1_start_index + i];

    for(j = 0; j < array2Len; j++)
        *pa2++ = array_data[array1_end_index + 1 + j];

    i = 0;
    j = 0;

    for(int k = array1_start_index; k <= array2_end_index; k++)
    {
        if((i < array1Len) && (j <array2Len))
        {
            if(array1Data[i] < array2Data[j])
                array_data[k] = array1Data[i++];
            else
                array_data[k] = array2Data[j++];
        }
        else if(i < array1Len)
            array_data[k] = array1Data[i++];
        else
            array_data[k] = array2Data[j++];
    }

 

    delete []array1Data;
    delete []array2Data;

}

 

合并排序递归算法中将一个问题分成两个更小的子问题的思想值得细细体会与不断玩味,大部分复杂的问题都可以借助这种方法

去解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值