求问,一个将整数插入已排好序的数组中的问题

Hhhhhhjjjooo 2018-01-14 03:14:44
程序如下,那个insert_data函数是如何工作的看不懂,可不可以解释一下
#include <stdio.h>

void insert_data(int x,int y[8 ])
{
int j;
for(j=6;j>=0;j--)
{
if (x<y[j])
break;
else
y[j+1]=y[j];
}
if (x>y[j])
y[j]=x;
else
y[j+1]=x;
}

void main()
{
int k,data,a[8]={191,150,112,98,30,5,-14};
scanf("%d",&data);
insert_data( data,a );
for(k=0;k<8;k++)
printf("%d ",a[k]);
}
...全文
522 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2018-01-14
  • 打赏
  • 举报
回复
越界只是小问题。 你试着把200插入那个数组,就该清楚错在哪里了
自信男孩 2018-01-14
  • 打赏
  • 举报
回复
这是一个插入排序,但是该排序方法可移植性差,针对你的这个需求(插入一个数据,插入两个数据就会导致数组越界);逻辑是和插入排序的方法是相同的。 第一步找到插入的位置:
for(j=6;j>=0;j--)
	{
		if (x < y[j])
			break;
		else
			y[j+1]=y[j];
	}
这个循环就是要插入的位置。当x < y[j]时就是找到了要插入的位置。其他情况时,数据整体向后移动,即y[j+1] = y[j]; 而这一步就是将x插入到对应的位置:
if (x>y[j])
		y[j]=x;
	else
		y[j+1]=x;
真相重于对错 2018-01-14
  • 打赏
  • 举报
回复
你这个程序有问题
啊哈moment 2018-01-14
  • 打赏
  • 举报
回复
排序函数写的不怎么地,看起来真费劲,而且并没有对原本的数组进行排序, 建议多看点基础的,有价值的书。
大米粥哥哥 2018-01-14
  • 打赏
  • 举报
回复
设置断点 单步调试 慢慢看

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧