【C语言】合并排序。

题目:

设子数组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语言】合并排序。)