排序算法 -归并排序

Posted

tags:

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

归并排序:

  将待排序的数组划分成若干的子数组使得这些子数组都是有序的,再将这些数组进行并,使得合并后的数组也是有序的,最后得到的数组既是已排好序的数组了

 

代码如下:

//合并排序
//将unsort[start,middle] 和 unsort[middle] 按照顺序排列到sort数组中
void marge(int unsort[], int start, int middle, int end)
{
    int sort[10];
    int i = start,j = middle + 1,k = start;

    while(i < middle+1 && j < end+1)
    {
        if(unsort[i] < unsort[j])
        {
            sort[k++] = unsort[i++];
        }
        else
        {
            sort[k++] = unsort[j++];
        }
    }
    while(i < middle+1)
    {
        sort[k++] = unsort[i++];
    }
    while(j < end+1)
    {
        sort[k++] = unsort[j++];
    }
    for(int i = start; i < end+1; i++)
    {
        unsort[i] = sort[i];
    }
}

void marge_sort(int unsort[], int lenght)
{
    int i = 0;
    int d = 1;
    //排列是以1,2,4,8进行增长的,进行合并的一个数组的长度大于等于数组的长度,就不用比较了,表示次数组已经比较完成
    while(d<lenght+1)
    {
        //对比的第一个数组的第一个值得索引应该在数组范围内
        while(i+d-1 < lenght)
        {
            if(i+2*d-1 < lenght)
            {
                marge(unsort, i, i+d-1, i+2*d-1);
                i = i+2*d;
            }
            else
            {
                marge(unsort, i, i+d-1, lenght-1);
                cout<<endl;
                i=lenght;
            }
        }
        d=d*2;
        i = 0;
    }
}

注意:

marge函数是对两数组进行对比的函数,对比的方法既是a数组的第一个值与b数组的第一个值进行对比,若是a的第一个值小,则将a[0]放入到一个临时的数组c[0]中,再将a[1]与b[0]比较,若b[0]小,则c[1]=b[0]....依此类推,最后将剩下的那个数组的值全部插入到c数组的末尾。

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

页面置换算法(最佳置换算法FIFO置换算法LRU置换算法LFU置换算法)

算法篇贪心算法介绍——基于Python实现的爬山算法

优化算法笔记(二)优化算法的分类

分类算法列一下有多少种?应用场景?分类算法介绍常见分类算法优缺点如何选择分类算法分类算法评估

2垃圾回收算法(标记清除算法复制算法标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)

遗传算法