牛骨文教育服务平台(让学习变的简单)
博文笔记

C语言(无序一组数插入有序一组数)2017.4.23

创建时间:2017-04-23 投稿人: 浏览次数:422
/*题目描述
在有序的整型数列中插入若干个数(数列中可以有零个元素),再插入过程中仍然有序。 
特别说明:待数列最初数据个数不超过20个,后续插入的数据个数不超过10个。 
输入
第一行是原始数列的元素个数n,
第二行是原始数列的n个整型元素值,以空格间隔。
第三行是待插入元素的个数m,
第四行是m个待插入元素值,以空格间隔。

输出
每次插入结束后打印当前数组,数字用空格隔开。 
即输出共m行, 分别显示插入第1个数后、插入第2个数后、...、插入第m个数后数组的值,数组元素间用空格隔开,每行最后一个数字后面没有空格。 

样例输入
3
1 8 12
5
7 5 4 10 14
样例输出
1 7 8 12
1 5 7 8 12
1 4 5 7 8 12
1 4 5 7 8 10 12
1 4 5 7 8 10 12 14

*/


#include <stdio.h>
#define SIZE 32
int *insert(int *a, int n);
int main()
{
    int n, m, i, j;
    int a[SIZE];

    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        scanf("%d", &a[i]);    //insert(a, n);之前是有序数列可以不用
   
    scanf("%d", &m);
    for (i = n + 1; i <= n + m; i++)
    {
        scanf("%d", &a[i]);
        insert(a, i);
        for (j = 1; j <= i; j++)
        {
            printf("%d", a[j]);
            if (i != j)
                putchar(" ");
        }
        putchar(" ");
    }


    return 0;
}
int *insert(int *a, int n)
{
    int i, j, num;

    for (i = 2; i <= n; i++)
    {
        num = a[i];
        for (j = i - 1; j >= 1; j--)//保证之前的数据排序正确
        {
            if (a[j] < num)
               break;
            else
               {a[j + 1] = a[j];
                 a[j] = num;}
        }
       
    }
    return a;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。