%Quick Sort by Saad aka a100
proc Swap (var num1, num2 : real)
var tnum := num1
num1 := num2
num2 := tnum
end Swap
proc Quick_Sort (var num : array 1 .. * of real, start, finish : int, var order : array 1 .. * of real)
if start < finish then
var pivot := num (start)
var up := start
var down := finish
loop
exit when up >= down
loop
exit when up > finish or num (up) > pivot
up += 1
end loop
loop
exit when down < start or num (down) <= pivot
down -= 1
end loop
if (up < down) then
Swap (num (up), num (down))
Swap (order (up), order (down))
elsif (up > down) then
Swap (num (start), num (down))
Swap (order (start), order (down))
Quick_Sort (num, start, down - 1, order)
Quick_Sort (num, down + 1, finish, order)
end if
end loop
end if
end Quick_Sort
var num, o : array 1 .. 10 of real
put "Orig"
for i : 1 .. upper (num)
num (i) := Rand.Int (0, 500)
o (i) := i
put num (i), " num ", o (i)
end for
var ime := Time.Elapsed
Quick_Sort (num, 1, upper (num), o)
var ime2 := Time.Elapsed
put "Time Taken is ", ime2 - ime, " ms "
locate (1, 40)
put "Sorted"
for i : 1 .. upper (num)
locate (i + 1, 40)
put num (i), " num ", o (i)
end for
|