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

来源:互联网 发布:js判断ios版本号 编辑:程序博客网 时间:2024/05/19 20:59

任务和代码:

/**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 10int 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 10int 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("% ",& );右引号之前不要留空格

      

阅读全文
0 0
原创粉丝点击