主题:数组排序,字符串排序
moz
[专家分:37620] 发布于 2006-11-19 13:07:00
[url=http://www.programfan.com/club/showbbs.asp?id=100474]这是以前发的关于文件排序[/url]
回复列表 (共5个回复)
沙发
moz [专家分:37620] 发布于 2006-11-19 13:23:00
数组排序,要注意数组的类型的配对,
针对不同的类型,在前面加一句DEFINT之类的就是了
SUB Sorta (s(), 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
Sorta s(), l%, i% - 1
Sorta s(), i% + 1, h%
ELSE
Sorta s(), i% + 1, h%
Sorta s(), l%, i% - 1
END IF
END IF
END IF
END SUB
板凳
moz [专家分:37620] 发布于 2006-11-19 13:27:00
字符串排序
u%为子串长度
SUB Sorts (s$, u%, l%, h%)
IF l% < h% THEN
IF h% - l% = 1 THEN
IF MID$(s$, l% * u% - u% + 1, u%) > MID$(s$, h% * u% - u% + 1, u%) THEN swaps s$, u%, l%, h%
ELSE
r% = INT(RND * (h% - l% + 1)) + l%
swaps s$, u%, r%, h%
p$ = MID$(s$, h% * u% - u% + 1, u%)
i% = l%
j% = h%
DO
DO WHILE (i% < j%) AND MID$(s$, i% * u% - u% + 1, u%) <= p$
i% = i% + 1
LOOP
DO WHILE (j% > i%) AND MID$(s$, j% * u% - u% + 1, u%) >= p$
j% = j% - 1
LOOP
IF i% < j% THEN swaps s$, u%, i%, j%
LOOP WHILE i% < j%
swaps s$, u%, i%, h%
IF (i% - l%) < (h% - i%) THEN
Sorts s$, u%, l%, i% - 1
Sorts s$, u%, i% + 1, h%
ELSE
Sorts s$, u%, i% + 1, h%
Sorts s$, u%, l%, i% - 1
END IF
END IF
END IF
END SUB
SUB swaps (s$, u%, l%, h%)
w$ = MID$(s$, l% * u% - u% + 1, u%)
MID$(s$, l% * u% - u% + 1, u%) = MID$(s$, h% * u% - u% + 1, u%)
MID$(s$, h% * u% - u% + 1, u%) = w$
END SUB
3 楼
hongcq [专家分:0] 发布于 2006-11-24 09:35:00
太复杂了,数组和字符串都可以直接用冒泡法或者选择法排序。简单实用效率高。
4 楼
w1212q [专家分:660] 发布于 2006-11-29 14:46:00
可以用搜索(非正常)来改造;
5 楼
def [专家分:3380] 发布于 2007-01-28 20:57:00
sub basesort(s(),lbounds%,ubounds%) '毛跑法
dim j%,k%
do '检测是否还要重排
k=0 '重排旗帜归零
for j% = %lbounds + 1 to ubounds% '从第二个开始检查比上一个小?
if s(j%)<s(j%-1) then
swap s(j%),s(j%-1)
k%=1
end if
next j
loop while k
end sub
我来回复