有序表插入(数组程序)

img


#include<stdio.h>
void insert(int a[],int n,int x)
{int i;
for(i=n-1;i>=0;i--)
if(a[i]>x) a[i+1]=a[i];
else break;
a[i+1]=x;
}
void output(int a[],int n)
{
    int i;
    for(i=0;i<n;i++) printf("%d",a[i]);
    printf("\n");
}
int main()
{
    int a[10],n,x;
    scanf("%d",&n);
    while(n>0){
    scanf("%d",&a[n]);n--;}
    scanf("%d",&x);
    insert(a,n,x);
    output(a,n+1);
    return 0;
}

不知道哪错了,怎么改,求解!

读取的scanf不对啊,你这读取的数据从大到小存,数据从小到大给你的,这升序的数据硬是给写成降序了
...
output也不对,插入了一个数,总共应该是n+1个数了没错,但你之前while里写了个n--啊,n都减少到0才退出循环,你认为还能打印几个数?

主函数修改:

int main()
{
    int a[10],n,x,i = 0;//修改
    scanf("%d",&n);
    while(i<n){     //修改
        scanf("%d",&a[i]);i++;//修改
    }
    scanf("%d",&x);
    insert(a,n,x);
    output(a,n+1);
    return 0;
}