您的位置:首页 > 编程语言 > C语言/C++

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

2017-10-19 15:49 363 查看
任务和代码:

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

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言