C语言:在排好序的数列中插入一个新的数,原来这么简单?
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
代码解析如下:
#include<stdio.h>
int main()
{
//首先定义两个数组,一个存放原始序列,另一个存放加入新数之后的新序列。
int t[10],s[11];
int i,j,k;
printf("请输入十个有序数:");
for(i=0;i<10;i++){
scanf("%d",&t[i]); //键盘输入十个有序数列。
}
/* 把换行符去掉,为了进行第二次输入。如果没有getchar(),有些编译器无法二次输入。
如果你的编译器不需要它也能二次输入,则可以去掉。*/
getchar();
printf("请输入要加入的数:");
scanf("%d",&k); //输入要加入的数。
for(i=0;i<9;i++)
{
//首先要确定这个数的大小在哪个范围。
if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1]))
{
//确定之后,记录这个数的范围的较小值,如 2<k<4 则 记录 j=2
j=i;
}
}
for(i=0;i<11;i++){
if(i<j){
//如果 i 在 j 之前,则直接将 t 数组中的数对应放到 s 数组中。
s[i]=t[i];
}
else if(i==j){
//如果 i 等于 j ,还是直接将 t 数组中的数对应放到 s 数组中。
s[i]=t[i];
//但 i+1 不能直接对应,而是将加入的值放入 i+1 中。
s[i+1]=k;
}
else{
/*由于多加入了一个数,所以之后的数要将 t 数组的数放到 s 数组的下一位。
也就是 t[i] 对应 s[i+1] */
s[i+1]=t[i];
}
}
printf("插入后的结果为:");
for(i=0;i<11;i++){
printf("%d ",s[i]); //最后打印新数组s
}
printf("n");
return 0;
}
完整的代码为:准备
#include<stdio.h>
int main()
{
int t[10],s[11];
int i,j,k;
printf("请输入十个有序数:");
for(i=0;i<10;i++){
scanf("%d",&t[i]);
}
printf("请输入要加入的数:");
scanf("%d",&k);
for(i=0;i<9;i++)
{
if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1]))
{
j=i;
}
}
for(i=0;i<11;i++)
{
if(i<j)
{
s[i]=t[i];
}
else if(i==j)
{
s[i]=t[i];
s[i+1]=k;
}
else
{
s[i+1]=t[i];
}
}
printf("插入后的结果为:");
for(i=0;i<11;i++){
printf("%d ",s[i]);
}
printf("n");
return 0;
}
正序结果为:
反序结果为: