题目要求:
已知数组a中的元素已按由小到大顺序排列,
编程实现将输入的一个数插入数组a中,
插入后,数组a中的元素仍然由小到大顺序排列。
思路:
数组a
0 1 2 3 4 5 6
数组赋值
1 2 3 4 5 6 0
插入7
1 2 3 4 5 6 7
插入4
1 2 3 5 6 0 0
源码如下:
数组赋值
1 2 3 4 5 6 0
插入7
1 2 3 4 5 6 7
插入4
1 2 3 5 6 0 0
源码如下:
/*
7、已知数组a中的元素已按由小到大顺序排列,
编程实现将输入的一个数插入数组a中,
插入后,数组a中的元素仍然由小到大顺序排列。
*/
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define OK 1;
#define ERROR 0;
int len;
typedef int Status;
Status insert(int *p,int val)
{
int i,t,mark;//mark来标记要插入的位置
//查找要插入的位置
for(i=0;i<len-2;i++)
{
if(val<p[0])//比所有值都小
{
mark=-1;
}
else
{
if(val>p[len-2])//比所有值都大
{
mark=-2;
}
else //处于中间
{
if(val>=p[i]&&val<=p[i+1])
{
mark=i;
}
}
}
}
//插入操作
if(mark==-2)//比所有值都大
{
p[len-1]=val;
}
else
{
if(mark==-1)//比所有值都小
{
for(i=len-2;i>=0;i--)
{
t=p[i+1];
p[i+1]=p[i];
p[i]=t;
}
p[0]=val;
}
else //处于中间
{
for(i=len-2;i>mark;i--)
{
t=p[i+1];
p[i+1]=p[i];
p[i]=t;
}
p[mark+1]=val;
}
}
for(i=0;i<10;i++)
printf("%d\t",p[i]);
printf("\n插入成功!\n");
return OK;
}
int main()
{
int a[10]={10,20,30,40,50,60,70,80,90};
int b,i=0;//b保存要插入的数据,i作为循环变量
len=sizeof(a)/4; //求数组长度
printf("请输入要插入的整型数据:\n");
scanf("%d",&b);
insert(a,b);
return 0;
} 截图一:
截图二:
本文标题:静态数组模拟插入并排序
本文链接:https://blog.quwenai.cn/post/2906.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。








还没有评论,来说两句吧...