38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
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
|