主题:[哆嗦贴] 新排列(利用字符串)
如果是单字符全选排列的话,还有一个方法:
a$ = "0123" '顺序排列好,为最小值
l = LEN(a$)
DO
PRINT a$
GOSUB 10
LOOP
END
10 '找下一个排列方式
for e=(l-1) to 1 step -1 '找不合适的位置 e
if mid$(a$,e,1)<mid$(a$,e+1,1) then exit for
next
if e<1 then end
FOR i = l TO (e + 1) STEP -1 '找需要交换的位置 i
IF MID$(a$, i, 1) > MID$(a$, e, 1) THEN EXIT FOR
NEXT
b$ = MID$(a$, i, 1) '交换字符
MID$(a$, i, 1) = MID$(a$, e, 1)
MID$(a$, e, 1) = b$
FOR i = (e + 1) TO (l + e + 1) \ 2 '对后面段的字符排顺序
j = l + e + 1 - i
b$ = MID$(a$, i, 1)
MID$(a$, i, 1) = MID$(a$, j, 1)
MID$(a$, j, 1) = b$
NEXT
RETURN
a$ = "0123" '顺序排列好,为最小值
l = LEN(a$)
DO
PRINT a$
GOSUB 10
LOOP
END
10 '找下一个排列方式
for e=(l-1) to 1 step -1 '找不合适的位置 e
if mid$(a$,e,1)<mid$(a$,e+1,1) then exit for
next
if e<1 then end
FOR i = l TO (e + 1) STEP -1 '找需要交换的位置 i
IF MID$(a$, i, 1) > MID$(a$, e, 1) THEN EXIT FOR
NEXT
b$ = MID$(a$, i, 1) '交换字符
MID$(a$, i, 1) = MID$(a$, e, 1)
MID$(a$, e, 1) = b$
FOR i = (e + 1) TO (l + e + 1) \ 2 '对后面段的字符排顺序
j = l + e + 1 - i
b$ = MID$(a$, i, 1)
MID$(a$, i, 1) = MID$(a$, j, 1)
MID$(a$, j, 1) = b$
NEXT
RETURN