A. 实验7-1-1 简化的插入排序

55 阅读1分钟
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数,并且将这两种情况特殊处理!!!