题目:

一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。要求定义一个函数insert(),将整数num插入在数组a的适当位置上,函数原型如下:

int insert(int a[], int n, int num);
另外函数仍然调用以前定义过的函数PrintArr()输出数组所有元素。

输入:

输入有三行。第一行是一个正整数n,n<1000。第二行是n个整数,第三行是待插入整数num。

输出:

输出非递减有序的n+1个整数,数据之间用空格隔开。输出占一行。

Exemple:

输入:

5

1  2  4  5  6 

3

输出:

1  2  3  4  5  6

My DaiMa:

#include<stdio.h>
int insert(int a[], int n, int x)  //这个调用函数用来求出数组中哪个数比x大
{
    int i,k;
    for(i=0;i<n;i++)
    {
        if(x<a[i])  //比较第几个数开始比x大,然后记录这个数的下标,把他赋值给k
        {
            k=i;
            break;
        }
        else if(x>=a[n-1])  //这是x比数组中所有数都大的情况,此时k=n
        {
            k=n;
            break;
        }
    }
    return k;
}
void PrintArr(int a[],int n,int x,int k)
{
    int i=n;
    while(i>k)  //从第k+1个数开始后面的数都往后推一个下标,but要从n开始倒着
    {                      往前面推每个数都等于他前面的那个数,因为第n个数是个空瓶子
        a[i]=a[i-1];
        i--;
    }
    a[k]=x;//直到i=k是跳出循环,让x赋值给第k个数
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    printf("%d",a[n]);  //然后依次输出n个数,第n个数后面没有空格
}
int main()
{
    int n,a[1000],i,x,k;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&x);
    k=insert(a,n,x);
    PrintArr(a,n,x,k);
    return 0;
}