100 REM Dutch national flag problem 110 DECLARE EXTERNAL SUB PrintColorSeq 120 DECLARE EXTERNAL SUB SortByColor 130 REM 0: blue, 1: while, 2: red 140 DIM T(0 TO 19) 150 LET UP = UBOUND(T) 160 REM Set colors 170 RANDOMIZE 180 FOR I = 0 TO UP 190 LET T(I) = INT(RND * 3) 200 NEXT I 210 PRINT "Unsorted:" 220 CALL PrintColorSeq(T) 230 CALL SortByColor(T) 240 PRINT 250 PRINT "Sorted:" 260 CALL PrintColorSeq(T) 270 END 280 ! 290 EXTERNAL SUB PrintColorSeq (T()) 300 FOR I = 0 TO UBOUND(T) 310 SELECT CASE T(I) 320 CASE 0 330 PRINT "B"; 340 CASE 1 350 PRINT "W"; 360 CASE 2 370 PRINT "R"; 380 END SELECT 390 NEXT I 400 PRINT 410 END SUB 420 ! 430 EXTERNAL SUB SortByColor (T()) 440 DECLARE EXTERNAL SUB Swap 450 LET B = 0 460 LET W = 0 470 LET R = UBOUND(T) 480 DO WHILE W <= R 490 SELECT CASE T(W) 500 CASE 1 510 LET W = W + 1 520 CASE 0 530 CALL Swap(T(B), T(W)) 540 LET B = B + 1 550 LET W = W + 1 560 CASE 2 570 call Swap(T(W), T(R)) 580 LET R = R - 1 590 END SELECT 600 LOOP 610 END SUB 620 ! 630 EXTERNAL SUB Swap(A, B) 640 REM Some implementations have the SWAP statement, but it is not standard 650 LET Tmp = A 660 LET A = B 670 LET B = Tmp 680 END SUB