1-D数列有序 问题C ACM

数列有序
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
提交时总是超时
不知道哪里还可以改进

#include<stdio.h>
int main(){
    int m,n,i;
    int a[101];
    while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0)){
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(i=0;i<n;i++){
            if(a[i-1]<=m&&a[i]>=m){
                a[i+1]=a[i];
                a[i]=m;
            }
        }
        for(i=0;i<=n-1;i++){
            printf("%d ",a[i]);
        }
        printf("%d",a[i]);
    }
}

3个回答

while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0)){
这种玩弄技巧而毫无可读性的代码应该改正。

100个数字插入,这种算法超时只有一个原因,就是你玩弄技巧导致输入的代码有问题,或者产生了死循环。
你没有给出m n的含义,也不知道你的输入是什么样的格式,这个你自己检查下。

超时的主要原因是你循环了一遍在数组中查找m的位置造成的,没必要将m插入到数组a中再输出数组a,直接输出即可,试试如下代码:

#include<stdio.h>
int main(){
    int m,n,i;
    int a[101];
    while(~scanf("%d %d",&m,&n)&&(m!=0||n!=0))
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            if(a[i] >= m)
                break;
            else
                printf("%d ",a[i]);
        }
        if(i==n)
            printf("%d",m);
        else
        {
            printf("%d ",m);
            for(;i<n-1;i++)
                printf("%d ",a[i]);
            printf("%d",a[n-1]);
        }
        printf("\n");
    }
        return 0;
}


#include<stdio.h>
int main()
{
    int a[1000],q[1000],b,c,d,i,l,t;
    scanf("%d",&b);
    for(i=0;i<b;i++)
    {
    scanf("%d",&a[i]);
    }
    scanf("%d",&c);
    a[b]=c;
    for(i=0;i<=b;i++)
    q[i]=a[i];
    for(l=0;l<b+1;l++)
    for(i=0;i<b-l;i++)
    if(q[i]>q[i+1])
    {
    t=q[i];q[i]=q[i+1];q[i+1]=t;
    }   
    for(i=0;i<=b;i++){
    if(i==b)
   printf("%d",q[i]);
   else printf("%d ",q[i]);
   }
    }

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐