回 帖 发 新 帖 刷新版面

主题:谁能帮忙?感激不尽

给十个数排序除了“冒泡法”之外还有什么方法?望大侠们指教,最好能将程序告诉我 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个回复)

沙发

目前能够想起的:希尔排序,插入排序,选择排序,快速排序,后三种都是用的比较广泛的,网上算法应该到处都是,自己去找。

板凳

交换变量值的时候在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 楼

楼上那位的,你的程序是不是有点问题啊!!
  好象不行哦!!

4 楼

是的!改好了!

5 楼

远同志,你不够仔细呢,我帮你改一改吧,
有很多语句可以更简洁一点的
你的结果只是取最大值,要排序还得加多一个循环

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 楼

有道理也!!

7 楼

我是楼主,水平有限,多谢大家帮忙

8 楼

“不提倡创新,要重于学习。”太对了

9 楼

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
这是顺序法。

我来回复

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