C语言提高-第20讲: 经典:查找的艺术(有序数组中插入数据)

任务和代码:

/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.19
*版本号:v2.
*问题描述:定义好一个有10个元素的数组,先输入9个呈升序的数作为前9个元素,再输入一个数,要求按原来排序的规律将它插入数组中。
例如,9个呈升序的数为1 7 8 17 23 24 59 62 101,需要插入的数字为50,输出的序列则为1 7 8 17 23 24 50 59 62 101。
*解题思路:进行一趟逐个比较,前一项若大于后一项,则交换
*/
#include <stdio.h>
#define SIZE 10
int main(){
    int a[SIZE],i,x,t;
    for(i=0;i<SIZE-1;i++)
        scanf("%d",&a[i]);
    printf("需要插入的数字为:");
    scanf("%d",&x);
    a[SIZE-1]=x;
    for(i=0;i<SIZE-1;i++){
        if(a[i]>a[SIZE-1]){
            t=a[i];
            a[i]=a[SIZE-1];
            a[SIZE-1]=t;
        }
    }
    for(i=0;i<SIZE;i++)
        printf("%d ",a[i]);
    return 0;
}
运行结果:


/*换一种解题思路:利用“倒序插队”的思路,把大数往后“搬”,腾出位置保存n
*/
#include <stdio.h>
#define SIZE 10
int main(){
    int a[SIZE],i,x,t;
    for(i=0;i<SIZE-1;i++)
        scanf("%d",&a[i]);
    printf("需要插入的数字为:");
    scanf("%d",&x);
    //找到a[]中大于x的元素
    for(i=0;i<SIZE-1;i++){
        if(a[i]>x)
            break;
    }
    t=i;
    //将大数往后移,腾出位置保存x
    for(i=SIZE-1;i>t;i--)          //当i=6时,跳到判断框中i--,再判断i>=t,跳出
        a[i]=a[i-1];

    a[i]=x;
    for(i=0;i<SIZE;i++)
        printf("%d ",a[i]);
    return 0;
}


知识点总结:

       1.将输入的数放入数组

       2.将一个数插入一组有序数组时,只需要在冒泡排序中走一趟;

          也可以利用“倒序插队”的思路,将大数往后挪


心得:

        scanf("%d",&a[i]);原来是scanf("%d ",&a[i]);时,运行结果:

       

       1.当输入字符串的时候,空格无法用scanf读入,用gets读入

       2.scanf里面是什么格式的就照着那个格式输入

       3.scanf("% ",& );右引号之前不要留空格

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值