A. 实验7-1-1 简化的插入排序
题目描述
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入
输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
样例查看模式
正常显示
查看格式
输入样例1
5
1 2 4 5 7
3
输出样例1
1 2 3 4 5 7
#include<stdio.h>
int main()
{
int n,num[15],x,j,i,z,index,min,max,index_min,c,d,e,index_max;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
scanf("%d",&x);
min=num[0];
max=num[0];
for(c=1;c<n;c++)
{
if(num[c]<min)
{
min=num[c];
index_min=c;
}
}
for(d=1;d<n;d++)
{
if(num[d]>max)
{
max=num[d];
index_max=d;
}
}
if(n!=0)
{
if(x<min)
{
printf("%d ",x);
for(e=0;e<n;e++)
{
printf("%d ",num[e]);
}
}
else if(x>max)
{
for(d=0;d<n;d++)
{
printf("%d ",num[d]);
}
printf("%d ",x);
}
else
{
for(i=0;i<n;i++)
{
if(num[i]<x&&num[i+1]>x)
{
index=i;
break;
}
}
for(j=0;j<=index;j++)
{
printf("%d ",num[j]);
}
printf("%d ",x);
for(z=index+1;z<n;z++)
{
printf("%d ",num[z]);
}
}
}
else
{
printf("%d ",x);
}
return 0;
}
想法上还是比较简单,就是先在数组中找出那个位置的数小于X,那个位置的下一个位置大于X,
找到所需的位置后记录该点位置break然后输出X,再照着原来的位置输出剩余的数即可~
这样真的就AC了吗
不!
我们忽略了两种边界情况,当X比最小的数还小时的情况和X比最大的数还大的情况!!!!
那么我们就需要先找出所给数字中的max数和min数,并且将这两种情况特殊处理!!!