已知数组a中的元素已按由小到大顺序排列,将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列

题目:

已知数组a中的元素已按由小到大顺序排列,将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列。

例如:

数组: a[11] = {1,5,10,22,33,47,55,59,63,67};

插入的数为:13

插入后的数组:a[11] = {1,5,10,13,22,33,47,55,59,63,67};

解题思路:

首先,我将要插入的数分为三类:

1、要插入的数大于数组中所有的数。那么直接将要插入的数赋值给数组的结尾元素。

2、要插入的数小于数组中所有的数。那么将数组的所有元素整体向后移动一位,将要插入的数赋值给数组的首个元素。

3、要插入的数大小处在数组的中间位置。首先通过遍历数组结合if条件判断,找到应该插入的位置,然后将插入位置后面的元素整体向后移动一位,再将要插入的数赋值到刚才找到的位置。

程序代码:

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    int n, i, j;
    int a[10] = {10,20,30,40,50,60,70,80,90};
    int size = sizeof(a)/sizeof(int);
    printf("插入之前数组为:");
    for(i = 0; i < size-1; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n请输入你要插入数组的数:");
    scanf("%d",&n);
    if(n < a[0]){//输入的数比数组中最小的数还小
        for(i = size-2; i >=0; i--){//将所有的数向后移动一位
            a[i+1] = a[i];
        }
        a[0] = n;//将输入的数赋值给数组第一个元素
    }
    else if(n > a[size - 2]){//输入的数比数组中最大的数还大
        a[size - 1] = n;//将输入的数放在数组最后的位置
    }
    else{
        for(i = 0; i < size-2; i++)
        {
            if(n <= a[i+1] && n >= a[i]){//找到输入的数应该在的位置
                for(j = size - 2; j >= i+1; j--){//将这个位置后面的元素往后移动一位
                    a[j+1] = a[j];
                }
                a[i+1] = n;//插入输入的数,插入后结束循环,否则还会进行插入
                break;
            }
        }
    }
    printf("插入之后的数组为:");
    for(i = 0; i < size; i++)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');

    return 0;
} 

运行结果:

插入之前数组为:10 20 30 40 50 60 70 80 90 
请输入你要插入数组的数:56
插入之后的数组为:10 20 30 40 50 56 60 70 80 90 
插入之前数组为:10 20 30 40 50 60 70 80 90 
请输入你要插入数组的数:8
插入之后的数组为:8 10 20 30 40 50 60 70 80 90 
插入之前数组为:10 20 30 40 50 60 70 80 90 
请输入你要插入数组的数:103
插入之后的数组为:10 20 30 40 50 60 70 80 90 103 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值