回 帖 发 新 帖 刷新版面

主题:关于插序

有一升序数列1,5,9,14,21现输入一数X使其输出仍然有序.
这个题怎么都做不好.求助大家的帮助.

回复列表 (共6个回复)

沙发

以下步骤虽然复杂,对使用中的效率比较高。听说书面上称之为二分法。

0. 检查升序还是倒序,比较首尾即可,这里假设是升序
1. 检查是否小于第一个数,第一个数设为位置A
     是 - 插入到队首,结束
     否 - 下一步2
2. 检查是否大于最后一个数,最后一个数设为位置B
     是 - 添加到队末,结束
     否 - 下一步3
3. 检查与位置A,位置B的中点C的数作比较大小,(在你的例子中与9作比较)
     相等 - 插入到当前位置C之前,结束
     大于 - 设此中点C为位置A
     小于 - 设此中点C为位置B
     位置A,B相邻 - 把新数插入到AB之间,结束
4. 重复步骤3

板凳

cls
dim a(6)          '这句也可以不要,因为数组默认元素有(0 to 10)个
for i=1 to 5:read a(i):next i
data 1,5,9,14,21
input x
for i=1 to 5
if x<a(i) and f=0 then ?x;:f=1
?a(i);
next i
if f=0 then ?x
end

3 楼

感谢大家的帮助!特别是MOZ和QB小猪.感谢你们的帮助.,收获很大.

4 楼

QB小猪,我还要问你下,还有点疑问.。
if x<a(i) and f=0 then ?x;:f=1
?a(i);
这两个语句应该怎样理解?
还有,if f=0 then ?x 又怎样理解???盼复。

5 楼

if x<a(i) and f=0 then ?x;:f=1
?a(i);
把这个数组按从小到大的顺序输出

if f=0 then ?x
这句话说明输入的X是最大的数,要放在最后输出

6 楼

5楼说对了一半,
因为原序列从小到大,所以用条件"x<a(i)",至于"f=0"是因为x输出以后不能再输出,所以用变量f达到目的.
我告诉你一个看懂程序的好办法:跟踪程序,就会看的八九不离十了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册