首页 > 代码库 > 算法学习笔记(四):合并排序

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

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

步骤:

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;}

 

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