-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbubble.f
73 lines (57 loc) · 1.47 KB
/
bubble.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
\ .( LOADING BUBBLE SORT BENCHMARK...) CR
\ A CLASSICAL BENCHMARK OF AN O(N**2) ALGORITHM; BUBBLE SORT
\
\ PART OF THE PROGRAMS GATHERED BY JOHN HENNESSY FOR THE MIPS
\ RISC PROJECT AT STANFORD. TRANSLATED TO FORTH BY MARTY FRAEMAN
\ JOHNS HOPKINS UNIVERSITY/APPLIED PHYSICS LABORATORY.
\ MM FORTH2C DOESN'T HAVE IT !
4 CONSTANT CELL
: MYBOUNDS OVER + SWAP ;
VARIABLE SEED ( -- ADDR)
: INITIATE-SEED ( -- ) 74755 SEED ! ;
: RANDOM ( -- N ) SEED @ 1309 * 13849 + 65535 AND DUP SEED ! ;
800 CONSTANT ELEMENTS ( -- INT)
CREATE LIST ELEMENTS CELLS ALLOT
: INITIATE-LIST ( -- )
LIST ELEMENTS CELLS + LIST DO RANDOM I ! CELL +LOOP
;
: DUMP-LIST ( -- )
LIST ELEMENTS CELLS + LIST DO I @ . CELL +LOOP CR
;
: VERIFY-LIST ( -- )
LIST ELEMENTS 1- CELLS MYBOUNDS DO
I 2@ > ABORT" BUBBLE-SORT: NOT SORTED"
CELL +LOOP
;
: BUBBLE ( -- )
\ ." BUBBLING..." CR
ELEMENTS 1 DO
LIST ELEMENTS I - CELLS MYBOUNDS DO
I 2@ > IF I 2@ SWAP I 2! THEN
CELL +LOOP
LOOP
;
: BUBBLE-SORT ( -- )
INITIATE-SEED
INITIATE-LIST
BUBBLE
VERIFY-LIST
;
: BUBBLE-WITH-FLAG ( -- )
1 ELEMENTS 1 DO
-1 LIST ELEMENTS I - CELLS MYBOUNDS DO
I 2@ > IF I 2@ SWAP I 2! DROP 0 THEN
CELL +LOOP
IF LEAVE THEN
LOOP
;
: BUBBLE-SORT-WITH-FLAG ( -- )
INITIATE-SEED
INITIATE-LIST
BUBBLE-WITH-FLAG
VERIFY-LIST
;
: MAIN ( -- )
BUBBLE-SORT
BUBBLE-SORT-WITH-FLAG DROP
;