RosettaCodeData/Task/Dutch-national-flag-problem/QuickBASIC/dutch-national-flag-problem.basic
2026-04-30 12:34:36 -04:00

57 lines
1,019 B
Text

' Dutch national flag problem
DECLARE SUB PrintColorSeq (T() AS INTEGER)
DECLARE SUB SortByColor (T() AS INTEGER)
CONST CBLUE% = 0, CWHITE% = 1, CRED% = 2
CONST N% = 20
DIM T(0 TO N% - 1) AS INTEGER
DIM I AS INTEGER
' Set colors
RANDOMIZE TIMER
FOR I = 0 TO N% - 1
T(I) = INT(RND * 3)
NEXT I
PRINT "Unsorted:"
CALL PrintColorSeq(T())
CALL SortByColor(T())
PRINT
PRINT "Sorted:"
CALL PrintColorSeq(T())
END
SUB PrintColorSeq (T() AS INTEGER)
DIM I AS INTEGER
FOR I = 0 TO UBOUND(T)
SELECT CASE T(I)
CASE CBLUE%
PRINT "B";
CASE CWHITE%
PRINT "W";
CASE CRED%
PRINT "R";
END SELECT
NEXT I
PRINT
END SUB
SUB SortByColor (T() AS INTEGER)
DIM B AS INTEGER, W AS INTEGER, R AS INTEGER
B = 0
W = 0
R = UBOUND(T)
DO WHILE W <= R
SELECT CASE T(W)
CASE CWHITE%
W = W + 1
CASE CBLUE%
SWAP T(B), T(W)
B = B + 1
W = W + 1
CASE CRED%
SWAP T(W), T(R)
R = R - 1
END SELECT
LOOP
END SUB