// Sort test with quicksort

DIM n OF LONG, i OF LONG, j OF LONG

PRINT AT 8,20: "Creating text array to sort ..."

n:=1000 // Number of text lines
DIM t$(n) OF 10
FOR i:=1 TO n DO
  FOR j:=1 TO 10 DO
    t$(i):+CHR$(RND(65,90))
  ENDFOR j
ENDFOR i

PAGE
PRINT AT 8,20: "Sorting the text array ..."
starttime:=TIMER
quicksort(t$(),1,n)

PAGE
PRINT AT 8,20: "Sorting complete."
PRINT AT 10,20: USING "Time used : ##.## secs": TIMER-starttime
s$:=INKEY$(5)

// ********  end of main program  ********

PROC quicksort(REF t$(),start OF LONG,slut OF LONG)
  LOCAL temp$ OF 10, x$ OF 10
  LOCAL a OF LONG, z OF LONG
  a:=start
  z:=slut
  x$:=t$((start+slut)/2)
  REPEAT
    WHILE t$(a)<x$ DO a:+1
    WHILE x$<t$(z) DO z:-1
    IF a<=z THEN
      temp$:=t$(a); t$(a):=t$(z); t$(z):=temp$
      a:+1
      z:-1
    ENDIF
  UNTIL a>z
  IF start<z THEN quicksort(t$(),start,z)
  IF a<slut THEN quicksort(t$(),a,slut)
ENDPROC quicksort
