主题:谁能帮忙?感激不尽
萧山·湘凌子
[专家分:10] 发布于 2005-05-10 16:34:00
给十个数排序除了“冒泡法”之外还有什么方法?望大侠们指教,最好能将程序告诉我 qq:395838063
“冒泡法”程序如下:
cls
for i = 1 to 10
input a(i)
next i
for m = 1 to 9
for n = 1 to 9
if a(n)<a(n+1) then
let c =a(n)
let a(n) = a(n+1)
let a(n+1) = c
end if
next n
next m
for y = 1 to 10
print a(y)
next y
end
以上程序就是将任意输入的十个数用“冒泡法”按从大到小的顺序排列。除此之外,我又找到一种方法:
for i = 1 to 10
input a(i)
next i
for m = 1 to 9
for n = m to 9
if a(m)<a(n+1) then
let c = a(m)
let a(m) =a(n+1)
let a(n+1) =c
end if
next n
next m
for u = 1 to 10
print a(u)
next u
end
请问各位大侠,除了这两种方法之外还有第三种方法吗?我冥思苦想了一个多周也没有想出来,望大侠们住小弟一臂之力。
回复列表 (共9个回复)
沙发
davidw017 [专家分:4170] 发布于 2005-05-10 17:17:00
目前能够想起的:希尔排序,插入排序,选择排序,快速排序,后三种都是用的比较广泛的,网上算法应该到处都是,自己去找。
板凳
啊远 [专家分:2610] 发布于 2005-05-10 18:21:00
交换变量值的时候在QB里不用这么烦吧! SWAP 放着不用做什么!!呵呵!
OPTION BASE 1
DIM a(10) AS INTEGER
CLS
FOR i% = 1 TO UBOUND(a) STEP 1
temp$ = "A(" + STR$(i%) + ") = "
PRINT temp$;
INPUT d%
a(i%) = d%
NEXT i%
FOR i% = 1 TO UBOUND(a) - 1 STEP 1
IF a(i%) < a(i% + 1) THEN SWAP a(i%),a(i% + 1)
NEXT
PRINT "MAX = "; a(UBOUND(a))
3 楼
江浸月 [专家分:0] 发布于 2005-05-10 19:49:00
楼上那位的,你的程序是不是有点问题啊!!
好象不行哦!!
4 楼
啊远 [专家分:2610] 发布于 2005-05-10 19:50:00
是的!改好了!
5 楼
moz [专家分:37620] 发布于 2005-05-11 12:46:00
远同志,你不够仔细呢,我帮你改一改吧,
有很多语句可以更简洁一点的
你的结果只是取最大值,要排序还得加多一个循环
cls
m=10
DIM a(m)
FOR i% = 1 TO m
INPUT "请输入数字 A(" +str$(i%)+ ")=",a(i%)
NEXT
FOR i% = 1 TO (m-1)
for j%= i% to m
IF a(i%) < a(j%) THEN SWAP a(i%),a(j%)
next
print a(i%)
NEXT
其实1楼说的不错
大家多找找会找多很多很好的例子
但老实说,我对那些名称不大知道
很多名称不一样,但道理相差不了多少的
比如有些把 for 语句改成 do 语句之类的
只要你把住了理论,你就可以创造自己的方法了
其实方法的优劣还得你多去试验各种语句的速度
当数据过于庞大的时候差别就会大起来的了
我只是着重于方向,不大精于技术,
所以技术还是得靠你自己去探索,
学海无涯,不一定能找到尽头的。
普通基本的排序我还懂得一点点,
数据不是太巨大的时候可以利用一下数组,
数据多的时候可以用一下随机文件来暂存数据,
不怕再说几句打击大家的说话,
在我们的程度(不针对高手喔),
不提倡创新,要重于学习。
去看看 Sort, Fox, Excel 的排序速度
你会觉得自己创的也是白创,能比得上人家吗?
把人家高技术学懂学会才是正道,才能创新。
我没学到,别问我,我是站着说话腰不疼。
6 楼
啊远 [专家分:2610] 发布于 2005-05-11 13:17:00
有道理也!!
7 楼
萧山·湘凌子 [专家分:10] 发布于 2005-05-15 18:45:00
我是楼主,水平有限,多谢大家帮忙
8 楼
萧山·湘凌子 [专家分:10] 发布于 2005-05-15 19:21:00
“不提倡创新,要重于学习。”太对了
9 楼
陈贺QB [专家分:140] 发布于 2005-05-16 21:47:00
dim a(i)
for i=1 to n-1
for j=i+1 to n
if a(i)> a(j) then
swap a(i),a(j)
print a(i)
end if
next j
next i
NED
这是顺序法。
我来回复