Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
40
Task/Quickselect-algorithm/11l/quickselect-algorithm.11l
Normal file
40
Task/Quickselect-algorithm/11l/quickselect-algorithm.11l
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
F partition(&vector, left, right, pivotIndex)
|
||||
V pivotValue = vector[pivotIndex]
|
||||
swap(&vector[pivotIndex], &vector[right])
|
||||
V storeIndex = left
|
||||
L(i) left .< right
|
||||
I vector[i] < pivotValue
|
||||
swap(&vector[storeIndex], &vector[i])
|
||||
storeIndex++
|
||||
swap(&vector[right], &vector[storeIndex])
|
||||
R storeIndex
|
||||
|
||||
F _select(&vector, =left, =right, =k)
|
||||
‘Returns the k-th smallest, (k >= 0), element of vector within vector[left:right+1] inclusive.’
|
||||
L
|
||||
V pivotIndex = (left + right) I/ 2
|
||||
V pivotNewIndex = partition(&vector, left, right, pivotIndex)
|
||||
V pivotDist = pivotNewIndex - left
|
||||
I pivotDist == k
|
||||
R vector[pivotNewIndex]
|
||||
E I k < pivotDist
|
||||
right = pivotNewIndex - 1
|
||||
E
|
||||
k -= pivotDist + 1
|
||||
left = pivotNewIndex + 1
|
||||
|
||||
F select(&vector, k)
|
||||
‘
|
||||
Returns the k-th smallest, (k >= 0), element of vector within vector[left:right+1].
|
||||
left, right default to (0, len(vector) - 1) if omitted
|
||||
’
|
||||
V left = 0
|
||||
V lv1 = vector.len - 1
|
||||
V right = lv1
|
||||
assert(!vector.empty & k >= 0, ‘Either null vector or k < 0 ’)
|
||||
assert(left C 0 .. lv1, ‘left is out of range’)
|
||||
assert(right C left .. lv1, ‘right is out of range’)
|
||||
R _select(&vector, left, right, k)
|
||||
|
||||
V v = [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]
|
||||
print((0.<10).map(i -> select(&:v, i)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue