码迷,mamicode.com
首页 > 编程语言 > 详细

算法学习笔记(四):合并排序

时间:2015-01-23 21:24:23      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

算法思想:基本的思想为分治算法,也就是将一个问题分成多个更小的部分递归解决。具体到合并排序,就是将待排序序列分为小的序列,递归进行排序,然后合并。

步骤:

1、分解:将n个元素分成各含n/2个元素的子序列

2、解决:用合并排序对两个子序列递归排序

3、合并:合并两个已排序的子序列以得到排序结果

在对子序列排序时,其长度为1时递归结束。

技术分享

算法复杂度:O(nlgn)

代码实现:

void divide_sort(int arr[],int p,int r)
{
    if(p<r)
    {
        int q = (r + p) / 2;
        divide_sort(arr, p, q);
        divide_sort(arr, q + 1, r);

        merge_sort(arr, p, q, r);
    }

}

void merge_sort(int arr[],int p,int q,int r)
{
    int n1 = q - p + 1;
    int n2 = r - q;

    int *L = new int[n1];
    int *R = new int[n2];

    memcpy(L, arr+p, n1*sizeof(int));
    memcpy(R, arr+q + 1 , n2*sizeof(int));
    int i, j;
    i = j = 0;

    int k = p;
    while (i!=n1&&j!=n2)
    {
        if(L[i]<=R[j])
        {
            arr[k++] = L[i++];
        }
        else
        {
            arr[k++] = R[j++];
        }
    }

    while(i!=n1)
    {
        arr[k++] = L[i++];
    }
    while(j!=n2)
    {
        arr[k++] = R[j++];
    }

    delete[] L;
    delete[] R;
}

 

算法学习笔记(四):合并排序

标签:

原文地址:http://www.cnblogs.com/haoliuhust/p/4245034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!