在一个已排序的数据组中插入一个数

想问为什么下面的代码无法输出呢

#include <stdio.h>

int main()
{
int a[]={1,2,3,5,6,7,8,9,10};
    int i,num,k,temp,t;
    
    scanf("%d",&num);
    
    for(i=0;i<9;i++)
    {
        if(num>a[8])
        {
            k=9;
        }
        if(num<a[0])
        {
            k=0;
        }
        if((num>a[i]&&num<a[i+1])||(num==a[i]))
        {
            k=i;
        }
        else break;
    }
    
    for(t=9;t>k+1;t--)
    {
        a[t]=a[t-1];
    }
    a[t+1]=num;
    
    for(i=0;i<10;i++)
    {
        printf("%d",a[i]);
    }
    return 0;
}

除了第14行和第18行后面的中文分号要修改,还需要数组a要定义下数组长度再赋值,以及修改下寻找位置与移动元素的代码。

修改如下:

参考链接:


#include <stdio.h>
 
int main()
{
    // https://blog.csdn.net/wanghao19920907/article/details/51787927
    int a[10]={1,2,3,5,6,7,8,9,10};
    int i,num,k,temp,t;
    
    scanf("%d",&num);
    
    for(i=0;i<9;i++)
    {
        if(num>=a[8])  //  大于等于a[8],包含和最后一个元素相等的情况 
        {
            k=9;
        }
        if(num<=a[0])  //  小于等于a[0],包含和第一个元素相同的情况 
        {
            k=0;
        }
        
        // 当输入的数大于等于当前元素,以及小于等于后面元素的位置
        // 则元素的插入位置为后一个元素的下标位置 
        if((num>=a[i]&&num<=a[i+1]))
        {
            k=i+1; 
        }
        
    }
    //printf("k=%d\n",k);
    
    if(k==9){ // 如果插入位置为数组最后一个下标位置,则直接赋值即可 
        a[k] = num;
    }else{  //其他情况,先将插入位置起始到后面的元素后移一个位置,再插入输入的数 

        
        for(i=9;i>k;i--){
            a[i]=a[i-1];
        }
        a[k] =num;
        
    }
    
    
    
    
//    for(t=9;t>k+1;t--)
//    {
//        a[t]=a[t-1];
//    }
//    a[t+1]=num;
    
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
 

img

14和18行你用的中文的分号,应该用英文分号