'
DEFINT A-Z
DECLARE SUB Sort (First, Last)

CLS

CONST NumEl = 9

DIM SHARED Array(NumEl), CStep

RANDOMIZE TIMER

PRINT "Unsorted array is:"
PRINT " 0 -";
FOR a = 0 TO NumEl
    READ Array(a)
    PRINT Array(a);
NEXT a
PRINT

Sort 0, NumEl

PRINT "Sorted array is:"
PRINT CStep; "-";

FOR a = 0 TO NumEl: PRINT Array(a); : NEXT a

END

DATA 23,45,89,74,51,18,87,63,36,38
'DATA 4,2,1,3,6,5
'DATA 1,2,3,4,5,6,7,8,9,10
'DATA 10,9,8,7,6,5,4,3,2,1

SUB Sort (First, Last)
    i = First
    j = Last

    f& = First
    l& = Last

    m = Array((f& + l&) / 2)

    DO
        DO WHILE Array(i) < m
            i = i + 1
        LOOP
       
        DO WHILE m < Array(j)
            j = j - 1
        LOOP

        IF i <= j THEN
            s = Array(i)
            Array(i) = Array(j)
            Array(j) = s
            i = i + 1
            j = j - 1
        END IF
       
        'CStep = CStep + 1
        'PRINT CStep; "-";
        'FOR a = 0 TO NumEl: PRINT Array(a); : NEXT a
        'PRINT
       
    LOOP WHILE i <= j
   
    IF First < j THEN Sort First, j
    IF i < Last THEN Sort i, Last
END SUB
'