鱼yuyuyuyuyu 2022-05-04 17:16 采纳率: 50%
浏览 39
已结题

在有序数组中插入新数字

目标是:先输入一组数据给数组a[n],再通过冒泡排序使其变得有序,最后输入一个新的数字ne,找到ne在该数组中的位置并插入,最后将数组输出,我的问题在哪呢?
#include<stdio.h>
int main()
{
int n,i,j,x,ne;
scanf("%d",&n);
float a[100]={0};
for(i=0;i<n;i++)
scanf("%f",&a[i]);
for(j=0;j<n-1;j++)
{
i=n-1;
while(i>j)
{
if(a[i]<a[i-1])
{
x=a[i];
a[i]=a[i-1];
a[i-1]=x;
}//冒泡排序
i--;
}
}

scanf("%f",&ne);
for (i=0;i<=n-1;i++)
{
    if(a[n-1]<ne) 
    {
        a[n]=ne;
        break;
    }
     if(a[i]<=ne&&a[i+1]>=ne)
    {
        j=n-1;
        while(j>=i)
        {
         a[j+1]=a[j];
         j--;
        }
        a[i]=ne;
        break;
    }
    if(ne<a[0])
    {
        j=n-1;
        while(j>=0)
        {
         a[j+1]=a[j];
         j--;
        }
        a[0]=ne;
        break;
    }
}
for(i=0;i<n+1;i++)
   printf("%f ",a[i]); 
   return 0;

}

  • 写回答

3条回答 默认 最新

  • a5156520 2022-05-04 19:10
    关注

    因为指定的数大于i位置的数,在找到指定位置的后一个位置放置指定的数就可以了。修改如下,供参考:

    
    #include<stdio.h>
    
    int main()
    {
        int n,i,j,x;
        float ne;
        scanf("%d",&n);
        float a[100]={0};
        for(i=0;i<n;i++)
            scanf("%f",&a[i]);
            
        for(j=0;j<n-1;j++)
        {
            i=n-1;
            while(i>j)
            {
                if(a[i]<a[i-1])
                {
                    x=a[i];
                    a[i]=a[i-1];
                    a[i-1]=x;
                }//冒泡排序
                i--;
            }
        }
        
        
    //    for(i=0;i<n;i++){
    //        printf("%f ",a[i]);
    //    }
        
        scanf("%f",&ne);
        
        for (i=0;i<=n-1;i++)
        {
            if(a[n-1]<ne) 
            {
                a[n]=ne;
                break;
            }
            
             if(a[i]<=ne&&a[i+1]>=ne)
            {
            //    printf("i=%d\n",i);
                j=n-1;
                while(j>i) //这里移动到指定的i后一个位置就应该停止,因为这个数大于a[i],所以在i的后一个位置放置指定的数 
                {
                 a[j+1]=a[j];
                // printf("i=%d,j=%d,a[%d]=%f\n",i,j,j,a[j]);
                 j--;
                }
                a[i+1]=ne;//在i的后一个位置放置指定的数 
                break;
            }
            
            if(ne<a[0])
            {
                j=n-1;
                while(j>=0)
                {
                 a[j+1]=a[j];
                 j--;
                }
                a[0]=ne;
                break;
            }
            
        }
        
        for(i=0;i<n+1;i++)
           printf("%f ",a[i]); 
           
           
       return 0;
    }
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度