主题:替换递归的快速(分组)排序
m% = 16000
DIM SHARED s(m%)
RANDOMIZE TIMER
FOR i% = 1 TO m%
s(i%) = RND
NEXT
QSort3 1, m%
调用排序
---------------------------------------------------
第一种: 标准的递归形式
SUB QuickSort (l%, h%)
IF l% < h% THEN
IF h% - l% = 1 THEN
IF s(l%) > s(h%) THEN SWAP s(l%), s(h%)
ELSE
r% = INT(RND * (h% - l% + 1)) + l%
SWAP s(h%), s(r%)
p = s(h%)
i% = l%
j% = h%
DO
DO WHILE (i% < j%) AND (s(i%) <= p)
i% = i% + 1
LOOP
DO WHILE (j% > i%) AND (s(j%) >= p)
j% = j% - 1
LOOP
IF i% < j% THEN SWAP s(i%), s(j%)
LOOP WHILE i% < j%
SWAP s(i%), s(h%)
IF (i% - l%) < (h% - i%) THEN
QuickSort l%, i% - 1
QuickSort i% + 1, h%
ELSE
QuickSort i% + 1, h%
QuickSort l%, i% - 1
END IF
END IF
END IF
END SUB
DIM SHARED s(m%)
RANDOMIZE TIMER
FOR i% = 1 TO m%
s(i%) = RND
NEXT
QSort3 1, m%
调用排序
---------------------------------------------------
第一种: 标准的递归形式
SUB QuickSort (l%, h%)
IF l% < h% THEN
IF h% - l% = 1 THEN
IF s(l%) > s(h%) THEN SWAP s(l%), s(h%)
ELSE
r% = INT(RND * (h% - l% + 1)) + l%
SWAP s(h%), s(r%)
p = s(h%)
i% = l%
j% = h%
DO
DO WHILE (i% < j%) AND (s(i%) <= p)
i% = i% + 1
LOOP
DO WHILE (j% > i%) AND (s(j%) >= p)
j% = j% - 1
LOOP
IF i% < j% THEN SWAP s(i%), s(j%)
LOOP WHILE i% < j%
SWAP s(i%), s(h%)
IF (i% - l%) < (h% - i%) THEN
QuickSort l%, i% - 1
QuickSort i% + 1, h%
ELSE
QuickSort i% + 1, h%
QuickSort l%, i% - 1
END IF
END IF
END IF
END SUB