-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathP07.BAS
54 lines (43 loc) · 819 Bytes
/
P07.BAS
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
DECLARE FUNCTION radixsort% (a() AS INTEGER, rad AS INTEGER, dig AS INTEGER)
DIM alen, rad, dig, i AS INTEGER
CLS
INPUT "A length: ", alen
DIM a(alen) AS INTEGER
FOR i = 1 TO alen
PRINT "A ["; i; "]: ";
INPUT a(i)
NEXT
INPUT "Radix: ", rad%
PRINT
dig% = 0
WHILE radixsort%(a(), rad%, dig%) > 0
dig% = dig% + 1
WEND
PRINT "A ["; alen; "]:"
FOR i = 1 TO alen
PRINT a(i)
NEXT
FUNCTION radixsort% (a() AS INTEGER, rad AS INTEGER, dig AS INTEGER)
DIM dv, al, pre AS INTEGER
DIM i, x, r, s, p AS INTEGER
pre = 0
dv = rad ^ dig
al = UBOUND(a)
DIM b(rad, al) AS INTEGER
DIM bl(rad) AS INTEGER
FOR i = 1 TO al
p = a(i) \ dv
IF p > pre THEN pre = p
x = (p MOD rad) + 1
bl(x) = bl(x) + 1
b(x, bl(x)) = a(i)
NEXT
i = 1
FOR r = 1 TO rad
FOR s = 1 TO bl(r)
a(i) = b(r, s)
i = i + 1
NEXT
NEXT
radixsort% = pre
END FUNCTION