在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本 *** 作之一。插入法排序算法

在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本 *** 作之一。插入法排序算法,第1张

我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n。函数定义为int f(int a[],int number,int n);

#include 
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=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

但结果并不正确: 

调试过程中发现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 
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=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

至此此题就算是完成了,也可以不用函数做。之前也写过一道输入一个数插入已知升序数组中

 

 

/*
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 
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]);
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1323417.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)