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

排序算法 -归并排序

时间:2016-03-17 14:44:46      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

归并排序:

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

 

代码如下:

//合并排序
//将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数组的末尾。

排序算法 -归并排序

标签:

原文地址:http://www.cnblogs.com/JuneXiangBlogs/p/5287027.html

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