Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,59 @@
#lang QB64
'***************************************************
'* BeadSort is VERY fast for small CGSortLibArray(max)-CGSortLibArray(min). Typical performance is
'* O(NlogN) or better. However as the key values (array values and ranges) go up, the performance
'* drops steeply excellent for small-ranged arrays. Integer only at this point. Throughput is
'* roughly 900k/GHzS for double-precision, with binary range (0,1). Related to CountingSort()
'***************************************************
SUB BeadSort (CGSortLibArray() AS DOUBLE, start AS LONG, finish AS LONG, order&)
DIM MAX AS DOUBLE: MAX = CGSortLibArray(start)
DIM BeadSort_Sum AS DOUBLE
DIM BeadSort_I AS LONG
DIM BeadSort_J AS LONG
FOR BeadSort_I = start + 1 TO (finish - start)
IF (CGSortLibArray(BeadSort_I) > MAX) THEN MAX = CGSortLibArray(BeadSort_I)
NEXT
REDIM beads((finish - start), MAX)
FOR BeadSort_I = 0 TO (finish - start) - 1
FOR BeadSort_J = 0 TO CGSortLibArray(BeadSort_I) - 1
beads(BeadSort_I, BeadSort_J) = 1
NEXT
NEXT
IF order& = 1 THEN
FOR BeadSort_J = 0 TO MAX
BeadSort_Sum = 0
FOR BeadSort_I = 0 TO (finish - start)
BeadSort_Sum = BeadSort_Sum + beads(BeadSort_I, BeadSort_J)
beads(BeadSort_I, BeadSort_J) = 0
NEXT
FOR BeadSort_I = (finish - start) - BeadSort_Sum TO (finish - start)
beads(BeadSort_I, BeadSort_J) = 1
NEXT
NEXT
FOR BeadSort_I = 0 TO (finish - start)
BeadSort_J = 0
WHILE BeadSort_J < MAX AND beads(BeadSort_I, BeadSort_J)
BeadSort_J = BeadSort_J + 1
WEND
CGSortLibArray(BeadSort_I) = BeadSort_J
NEXT
ELSE
FOR BeadSort_J = MAX TO 0 STEP -1
BeadSort_Sum = 0
FOR I = 0 TO (finish - start)
BeadSort_Sum = BeadSort_Sum + beads(I, BeadSort_J)
beads(I, BeadSort_J) = 0
NEXT
FOR I = (finish - start) TO (finish - start) - BeadSort_Sum STEP -1
beads(I, BeadSort_J) = 1
NEXT
NEXT
FOR BeadSort_I = 0 TO (finish - start)
BeadSort_J = 0
WHILE BeadSort_J < MAX AND beads(BeadSort_I, BeadSort_J)
BeadSort_J = BeadSort_J + 1
WEND
CGSortLibArray(finish - BeadSort_I) = BeadSort_J
NEXT
END IF
END SUB