Input: |
: an unsorted list of length |
FirstIndex: the first index of to be sorted |
LastIndex: the last index of to be sorted |
: top- elements of are to be sorted |
Output: |
: Sorted top- elements of ranging from FirstIndex to LastIndex |
: a stack of pivot positons useful for the afterwards selection sorts |
(1) if FirstIndex < LastIndex then |
(2) if !isempty() & top() < LastIndex then /* the stack is available */ |
(3) pivotpos = pop() /* use the top element of the stack as the pivot */ |
(4) else |
(5) /* Partition without using pivots from the stack */ |
(6) pivotpos=Partition(L, FirstIndex, LastIndex) |
(7) if pivotpos− FirstIndex +1> then /* The pivot falls after position */ |
(8) /* The pivot may be useful for the afterwards steps */ |
(9) push(pivotpos, ) |
(10) /* QuickSort for top-k in the upper part */ |
(11) QuickSortTopK(L, FirstIndex, pivotpos −1, k) |
(12) /* The pivot is located exactly at position */ |
(13) elseif(pivotpos− FirstIndex +1==) |
(14) /* QuickSort for top- in the upper part */ |
(15) QuickSortTopK(L, FirstIndex, pivotpos −1, ) |
(16) else /* The pivot falls prior to position k */ |
(17) /* QuickSort the upper part */ |
(18) QuickSortTopK(L, FirstIndex, pivotpos −1, pivotpos− FirstIndex) |
(19) /* QuickSort for the residual elements in the lower part */ |
(20) QuickSortTopK(, pivotpos +1, FirstIndex, -pivotpos+ FirstIndex −1) |