归并排序

来源:互联网 发布:苏联国歌 知乎 编辑:程序博客网 时间:2024/06/09 14:31

归并排序思想:首先把要排序的数组分为两部分,然后对这两部分数组分别进行归并排序(直至分到只剩一个数),最后将这两个数组合并。注意合并的时候是将这两个数组里的数移动到一个新的数组里面,当然是由小到大。

代码实现:

void mergeSort(int *num, int f, int e, int *p){    if(f==e)    {        return;    }    int mid=(f+e)/2;    mergeSort(num, f, mid, p);    mergeSort(num, mid+1, e, p);    merge(num, f, mid, mid+1, e , p);}void merge(int *num,int f1, int e1, int f2, int e2, int *p)                    //两个要归并的数组的开始下标和结束下标 f1在f2前面{    int a1 = f1;    int a2 = f2;    int i = 0;        while(a1<=e1 && a2<=e2)        {            if(num[a1]>=num[a2])            {                p[i++] = num[a1++];            }            else            {                p[i++] = num[a2++];            }        }        while(a1<=e1)        {            p[i++] = num[a1++];        }        while(a2<=e2)        {             p[i++] = num[a2++];        }        for(int k=0; k<i; k++)        {            num[k+f1]=p[k];        }}