Procedure QuickPartition (Array L(1), left, right, pivotIndex) pivotValue = L(pivotIndex) Swap L(pivotIndex) , L(right); Move pivot To End storeIndex = left For i=left To right-1 If L(i) < pivotValue Swap L(storeIndex),L(i) storeIndex+1 EndIf Next i Swap L(right), L(storeIndex) ; Move pivot To its final place ProcedureReturn storeIndex EndProcedure Procedure QuickSelect(Array L(1), left, right, k) Repeat If left = right:ProcedureReturn L(left):EndIf pivotIndex.i= left; Select pivotIndex between left And right pivotIndex= QuickPartition(L(), left, right, pivotIndex) If k = pivotIndex ProcedureReturn L(k) ElseIf k < pivotIndex right= pivotIndex - 1 Else left= pivotIndex + 1 EndIf ForEver EndProcedure Dim L.i(9) For i=0 To 9 Read L(i) Next i DataSection Data.i 9, 8, 7, 6, 5, 0, 1, 2, 3, 4 EndDataSection For i=0 To 9 Debug QuickSelect(L(),0,9,i) Next i