编程 将一个数插入到有序数列中,插入后的数列依然有序

如题所述

var i,j,n,x,t:longint;
a:Array[1..2000]of longint;
procedure swap(var a,b:longint);//交换2个数的过程
var c:longint;
begin
c:=a;a:=b;b:=c;
end;
begin
readln(n);
for i:=1 to n do read(a[i]);//读入n个数
readln(x);//读入要插入的数
a[n+1]:=x;//把要插入的数放进数组
inc(n);//现在有n+1个数,所以n要+1
for i:=1 to n do begin //冒泡排序,其实也就是把x插进去
for j:=i+1 to n do
if a[1]>a[2] then begin //如果a序列是降序排列
if a[i]<a[j] then swap(a[i],a[j]);//交换2个数
end else begin //a数组是升序排列
if a[i]>a[j] then swap(a[i],a[j]);//交换2个数
end;
end;
for i:=1 to n do write(a[i],' ');//输出
writeln;
end.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-02
就是说一列从小到大排列的数, 比如123456 ,叫有序数列,再给你一个数,比如22,放进去,依然要按照大小排列、不能打乱顺序。 学过10年了,忘了,给你个思路,就是把X与那个序列的数依次比较大小,用一个选择循环。
第2个回答  推荐于2017-09-13
#include <stdio.h>
int main()
{
char a[20]={1,25,36,32,86,56,34,99,60,40};
int i,j,t;

for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("排序后:\n");
for (i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");

char c='Y';
while(c=='Y'||c=='y')
{

int b,k;
printf("输入插入的数:");
scanf(" %d",&b);
a[10]=b;
for (i=0;i<10;i++)
if (a[10]>a[i])
{

continue;

}
else
{
for (k=10;k>i;k--)
a[k]=a[k-1];
a[i]=b;
}

printf("排序后:\n");
for (i=0;i<11;i++)
printf("%5d",a[i]);
printf("\n");
printf("还要继续吗?Y/N:");
scanf(" %c",&c);
}
return 0;
}本回答被网友采纳
第3个回答  2017-10-29
数组是连在一起的
你插入一个数,数组就会向后移
就像一个人插队一样
成功 ,队伍就会向后移
失败 ,就会将你踢出去 ,还有一种情况就是队伍解散
第4个回答  2017-08-08
add到list之后然后reverse一下就ok啦。或者是取下标循环比较该数和每个元素的大小,把他放在第一个比他大的位置上。后面的依次往后排
相似回答