Sorting algorithms/Quicksort: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Miranda) |
(Sorting algorithms/Quicksort in True BASIC) |
||
Line 9,263: | Line 9,263: | ||
puts [quicksort {8 6 4 2 1 3 5 7 9}] ;# => 1 2 3 4 5 6 7 8 9</syntaxhighlight> |
puts [quicksort {8 6 4 2 1 3 5 7 9}] ;# => 1 2 3 4 5 6 7 8 9</syntaxhighlight> |
||
=={{header|True BASIC}}== |
|||
<syntaxhighlight lang="qbasic">SUB quicksort (arr(), l, r) |
|||
LET lidx = round(l) |
|||
LET ridx = round(r) |
|||
IF (r-l) > 0 THEN |
|||
LET pivot = round((l+r)/2) |
|||
DO WHILE (lidx <= pivot) AND (ridx >= pivot) |
|||
DO WHILE (arr(lidx) < arr(pivot)) AND (lidx <= pivot) |
|||
LET lidx = lidx+1 |
|||
LOOP |
|||
DO WHILE (arr(ridx) > arr(pivot)) AND (ridx >= pivot) |
|||
LET ridx = ridx-1 |
|||
LOOP |
|||
LET temp = arr(lidx) |
|||
LET arr(lidx) = arr(ridx) |
|||
LET arr(ridx) = temp |
|||
LET lidx = lidx+1 |
|||
LET ridx = ridx-1 |
|||
IF (lidx-1) = pivot THEN |
|||
LET ridx = ridx+1 |
|||
LET pivot = ridx |
|||
ELSEIF (ridx+1) = pivot THEN |
|||
LET lidx = lidx-1 |
|||
LET pivot = lidx |
|||
END IF |
|||
LOOP |
|||
CALL quicksort (arr(), l, pivot-1) |
|||
CALL quicksort (arr(), pivot+1, r) |
|||
END IF |
|||
END SUB |
|||
DIM arr(15) |
|||
LET a = round(LBOUND(arr)) |
|||
LET b = round(UBOUND(arr)) |
|||
RANDOMIZE |
|||
FOR n = a TO b |
|||
LET arr(n) = round(INT(RND*99)) |
|||
NEXT n |
|||
PRINT "unsort "; |
|||
FOR n = a TO b |
|||
PRINT arr(n); " "; |
|||
NEXT n |
|||
PRINT |
|||
PRINT " sort "; |
|||
CALL quicksort (arr(), a, b) |
|||
FOR n = a TO b |
|||
PRINT arr(n); " "; |
|||
NEXT n |
|||
END</syntaxhighlight> |
|||
=={{header|TypeScript}}== |
=={{header|TypeScript}}== |