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

【C语言】合并排序。

时间:2015-05-08 16:37:20      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

题目:

设子数组a[0:k]和a[k+1:n-1]已排好序(0<=k<=n-2)。试设计一个合并这两个子数组为排好序的数组a[0:n-1]的算法。要求算法的在最坏情况下所用的计算时间为O(n),且只用到O(1)的辅助空间。

#include <stdio.h>
void houyi(int a[],int l,int r)
{
    int rr = r;
    while(rr >= l)
    {
        a[rr] = a[rr-1];
        rr--;
    }
}
int main ()
{
    int a[] = {1,4,6,8,2,3,5,10};
    int i= 0;
    int n = sizeof(a)/sizeof(a[0]);
    int l = 0;
    int r = (n-l)/2;
    while(l<r)
    {

        while(a[l] < a[r])
        {
            l++;
        }       
        while(a[l] > a[r])
        {
            int t = a[r];
            houyi(a,l,r);
            a[l] = t;
            l++;
            r++;
        }
    }
    for(i=0; i<n; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

即将前半部分排好序的子数组以及后半部分排好序的子数组合并成一个排好序的数组。

技术分享

【C语言】合并排序。

标签:

原文地址:http://blog.csdn.net/sulijuan66/article/details/45580139

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