编写函数实现简单的插值进入有序数组问题

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
      老骥伏枥,志在千里!烈士暮年,壮心不已!
 

 

一、题目要求:

        从键盘输入 10个整数,存储在数组中(数组长度大于 10),先按递增的顺序排序,再输入一个整数 n,将n插到数组中,并保持数组的有序性。

二、分析:

        分析:将题目分解为以下4个函数实现。
        (1)void inputa(int a[],int n):功能是输入n个整数存储在整型数组的前n个元素中
        (2) void ouputa(int a[],int n):功能是输出整型数组的前n个元素的值。
        (3)void bubblesort(int a[],int n):功能是对整型数组的前n个数据按升序排序。
        (4)void insert(int a[],int n,intx):功能是在有n个有序数据的数组中插入整数x,数组中的数据仍然有序。

        方法是用 x 和数组中的有序数据从后往前逐个比较,若数据大于x,则该数据后移一个位置,直到找到第一个比 x 小的数据,该位置的后一个位置就是插入 x的位置。

三、程序设计:

#include<stdio.h>

void inputa(int a[],int n);//声明函数inputa() 
void outputa(int a[],int n);//声明函数outputa() 
void bubbersort(int a[],int n);//声明函数bubbersort
void insert(int a[],int n,int x);//声明函数insert

int main(){
	int a[20],n;//定义数组a,最多可存放20个整数 
	printf("请先输入10个整数:");
	inputa(a,10);//调用函数inputa(),输入10个数据到数组a中 
	printf("排序后数组中的数据:\n");
	bubbersort(a,10);//调用函数bubbersort(),输出a前10个数据 
	outputa(a,10);//调用函数outputa(),输出a前10个数据 
	printf("请再输入1个整数:");
	scanf("%d",&n);
	printf("插入%d后数组中的数据:\n",n);
	insert(a,10,n);//调用函数insert(),在有10个有序的数组a中插入n 
	outputa(a,11);//调用函数outputa(),输出数组a的前11个数据 
	return 0;
}

void inputa(int a[],int n){//定义函数inputa() 
	int i;
	for(i=0;i<n;i++){
		scanf("%4d",&a[i]);
	}
}

void outputa(int a[],int n){//定义函数outputa()
	int i;
	for(i=0;i<n;i++){
		printf("%4d",a[i]);
	}
	printf("\n");
}

void bubbersort(int a[],int n){//定义函数bubbersort()
	int i,j,temp;
	for(i=1;i<=n;i++){//n-1趟冒泡排序 
		for(j=0;j<n-i;j++){
			if(a[j]>a[j+1]){//相邻两元素比较 
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}

void insert(int a[],int n,int x){//定义函数insert() 
	int i;
	for(i=n-1;i>=0&&x<a[i];i--){//当下标为i的数据大于x时 
			a[i+1]=a[i];        //数据后移 
	}
	a[i+1]=x;//将x插入合适的位置			
}

四、运行结果:

五、总结:

        从上例可以看出,在主函数中只是定义了存储数据的数组和变量,其他的工作几乎都是调用函数实现的,使程序设计模块化。  

        最后,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容,欢迎大家在评论区和我交流讨论!

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梵豪

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值