在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法
我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n。函数定义为int f(int a[],int number,int n);
#include <stdio.h>
int f(int a[],int number,int n);//a[]已按升序排列的数组 number数组元素 n需要插入的
int main()
{int size,i,array[size],x,m;printf("Input array size:\n");scanf("%d",&size);printf("Input array:\n");for(i=0;i<size;i++){scanf("%d",&array[i]);}/*for(m=0;m<size;m++){printf("%4d",array[m]);}*/ //添加第一处循环printf("Input x:\n");scanf("%d",&x);/*for(m=0;m<size;m++){printf("%4d",array[m]);}printf("%d",x);*/ //添加第二处循环f(array,size,x);
}int f(int a[],int number,int n)
{int j,b[number+1],k;for(j=0;j<number;j++){b[j]=a[j];if(n>=a[j]&&n<=a[j+1]){j++;b[j]=n;break;}else if(n>=a[number-1]){b[number+1]=n;}else if(n<=a[0]){b[j]=n;break;}}for(k=j+1;k<number+1;j++,k++){b[k]=a[j];}printf("After insert %d:\n",n);for(k=0;k<number+1;k++){printf("%4d",b[k]);}
}
但结果并不正确:
调试过程中发现a[number-1]=5,也就是数组中最后一位是5。
但应该是6才对,于是我在主函数中添加了循环遍历整个数组,想查出数组元素变化在何处,找出问题所在。
添加第一处循环:在scanf("%d",&x);之前添加循环遍历数组,输出数组元素,发现在scanf("%d",&x);之前数组array[5]={1,2,3,4,6},正确的。
添加第二处循环:在scanf("%d%,&x);之后添加循环,遍历整个数组,输出数组元素,发现在scanf("%d",&x);之后数组array[5]={1,2,3,4,5},错误的!!
既然如此,不会别的,那就把scanf("%d",&x);放在函数里吧。
#include <stdio.h>
int f(int a[],int number);//a[]已按升序排列的数组 number数组元素 n需要插入的
int main()
{int size,i,array[size],x,m;printf("Input array size:\n");scanf("%d",&size);printf("Input array:\n");for(i=0;i<size;i++){scanf("%d",&array[i]);}f(array,size);
}int f(int a[],int number)
{int x,j,b[number+1],k;printf("Input x:\n");scanf("%d",&x);for(j=0;j<number;j++){b[j]=a[j];if(x>=a[j]&&x<=a[j+1]){j++;b[j]=x;break;}else if(x>=a[number-1]){b[number+1]=x;}else if(x<=a[0]){b[j]=x;break;}}for(k=j+1;k<number+1;j++,k++){b[k]=a[j];}printf("After insert %d:\n",x);for(k=0;k<number+1;k++){printf("%4d",b[k]);}
}
至此此题就算是完成了,也可以不用函数做。之前也写过一道输入一个数插入已知升序数组中
/*
Q458.(10分)实验七、数组实验(一)
4.
设数组a的定义如下:int a[20]={2,4,6,8,10,12,14,16};
已存入数组中的数据值已经按由小到大的顺序存放,
现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。
**输入格式要求:"%d" 提示信息:"Enter n:"
**输出格式要求:"%d "
程序运行示例如下:
Enter n:11
2 4 6 8 10 11 12 14 16
*/
#include <stdio.h>
int main()
{ int a[20]={2,4,6,8,10,12,14,16};int n,i,j,b[9];printf("Enter n:");scanf("%d",&n);for(i=0;i<9;i++){b[i]=a[i];//思路就是把未插入之前的a[i]赋值给b[i] if(n>=a[i]&&n<=a[i+1]){b[i+1]=n;i++;break; //假如n在数组之间,插入n在第i+1位,因为break,不继续循环,所以i++ }else if(n>=a[7]){b[8]=n; //n大于16}else if(n<=a[0]){b[i]=n; //n小于2 break;}} for(j=i+1;j<10;i++,j++){b[j]=a[i]; }for(j=0;j<9;j++){printf("%d ",b[j]);}
}
在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法相关推荐
- 依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的5个数,且该数是奇数,则把这个四位数按从小到大的顺序存入数组b中,并计算满足上述条件的四位数的个数cnt。
已知数据文件IN28.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位 ...
- EXCEL中如何每隔N行插入一个空白行
需求:当前工作表有几千条数据,现在需要不改变原有数据的基础上,每隔8行插入一个空白行. 实现逻辑:使用辅助列,来实现定位,然后找到定位位置,插入一个空白行. 1.对需要插入空白行的工作表,插入辅助列. ...
- access数据库中怎么添加计算机,向access2007数据库中添加一个或多个记录
时 间:2008-10-22 13:27:07 作 者: 摘 要:向Access2007数据库中添加一个或多个记录 正 文: 本文介绍如何向 Microsoft Office Access 2007 ...
- .NET Core中的一个接口多种实现的依赖注入与动态选择
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个 ...
- windows linux内核版本,微软决定在Windows10中发布一个完整的Linux内核
原标题:微软决定在Windows10中发布一个完整的Linux内核 近年来,微软让Linux开发者社区的许多人都感到惊喜,包括在Windows中加入了Bash shell,在Win10中加入了本地Op ...
- html中模块怎么创建,在Joomla中创建一个自定义HTML模块,不显示
我有几个Joomla!我感到有信心的网站.我的Joomla!网站有一个artisteer模板. 我最近做了一个"戳出"的图片,突出了纸张的边缘,并展示了一个android" ...
- html表格垂直居中的CSS代码,使用3行CSS代码使任何元素垂直居中
在页面设计中,使元素水平居中是比较简单的事情.但是如何使元素垂直居中呢?其实,我们通过3行CSS代码(不包括添加浏览器厂商所需的代码)就可以使任何元素垂直居中.秘诀就是使用transform: tra ...
- go 已知有个排序(升序)的数组,要求插入一个元素,最后打印该数组,顺序依然是升序
// 任意位置插入数字类型的元素 // @param slice []int 将指定元素插入的切片 // @param num int 插入的指定元素 // @param index int 插入的指 ...
- Golang数组练习题:已知有一个排序好的升序数组,要求插入一个元素,最后打印该数组,顺序依然是升序
已知有一个排序好的升序数组,要求插入一个元素,最后打印该数组,顺序依然是升序 package mainimport ("fmt" )func main() {/*已知有一个排序好的 ...
最新文章
- IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!
- 初学者如何学习Vim
- Java语言深入:构造方法调用浅谈
- 【C++基础】时间类型详解(转)
- 达摩院2020十大科技趋势发布:云成IT技术创新中心
- “拼木头”算法挑战赛:禁忌搜索算法,用Javascript 跑
- qt截图怎样实现橡皮擦_利用QT实现截屏的四种方法
- 洛谷 P1948 [USACO08JAN]电话线Telephone Lines
- 唐雄燕点评NFV产业进程:2016年将迎来试点年
- 利用DHT网络原理制作bt采集蜘蛛
- 联想台式主机拆机教程_联想主机外壳怎么拆开_联想主机怎么拆图解
- php实现RSA加密解密
- net_speeder发双倍包加速
- 100句充满智慧的人生格言
- 建设数据中心机房主要看这几点,否则被定为劣质机房!!!
- js获取当前月、上一月和下一月
- 斯坦福AI2021报告出炉!详解七大热点,论文引用中国首超美国
- 7-2 长度质量计量单位换算(分数 5)
- 论文解读:SentiPrompt: Sentiment Knowledge Enhanced Prompt-Tuning for Aspect-Based Sentiment Analysis
- 【PAT】计算a+b并以标准格式输出其和