打卡第六天-----1025

[编程入门]数组插入处理

时间限制: 3s 内存限制: 192MB 提交: 47002 解决: 28148

题目描述

已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。

输入格式

第一行,原始数列。 第二行,需要插入的数字。

输出格式

排序后的数列

样例输入

复制

1 7 8 17 23 24 59 62 101
50

样例输出

复制

1
7
8
17
23
24
50
59
62
101

错误代码:

#include <stdio.h>
#include <math.h>
#define N 100
int main(void)
{
    int arr[N],n;
    for(int i=0;i<9;i++)
    {
        scanf("%d ",&arr[i]);
    }
    scanf("%d",&n);
    for(int i=0;i<9;i++)
    {
        if(n>arr[i])//错因1
        {
            for(int j=i+1;j<9;j++)//错因2
            {
                arr[j+1]=arr[j];
            }
            arr[i+1]=n;//错因3
        }
    }
    for(int i=0;i<=9;i++)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}

实现代码:

#include <stdio.h>
#include <math.h>
#define N 100
int main(void)
{
    int arr[N],n;
    for(int i=0;i<9;i++)
    {
        scanf("%d ",&arr[i]);
        //输入原始数列
    }
    scanf("%d",&n);
    //输入需要插入的数字
    for(int i=0;i<9;i++)
    //遍历数组
    {
        if(n<arr[i])
/*若比当前数组值小,则停下放在其之前(其实上是
  占据其位置,把当前数组挤到后面去)*/
            
        {
            for(int j=9;j>i;j--)
//从后面开始,不要从前面开始会有问题
            {
                arr[j]=arr[j-1];
            //新数字插入之后的数组元素往后排            
            }
            arr[i]=n;
            //放入新数字到当前数组位置
            break;
        }
    }
    for(int i=0;i<=9;i++)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}

错误原因:

1.数组遍历时若从前开始,则if的条件是n<arr[i](直到找到比其大的数);若从后开始,才是n>arr[i](直到找到比其小的数)

 2. for(int j=i;j<9;j++)
       {arr[j+1]=arr[j];}这样往后移的话,arr[7]=arr[6],arr[8]=arr[7].......这样后面的值其实都是arr[6]的值,因为先把前面的移动了再往后移时其原本位置存储的数据已经发生变化了,所以先从后面开始移动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值