Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
37
Task/Quickselect-algorithm/Picat/quickselect-algorithm.picat
Normal file
37
Task/Quickselect-algorithm/Picat/quickselect-algorithm.picat
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
main =>
|
||||
L = [9,8,7,6,5,0,1,2,3,4],
|
||||
Len = L.len,
|
||||
println([select(L,1,Len,I) : I in 1..Len]),
|
||||
nl.
|
||||
|
||||
select(List, Left, Right, K) = Select =>
|
||||
if Left = Right then
|
||||
Select = List[Left]
|
||||
else
|
||||
PivotIndex = partition(List, Left, Right, random(Left,Right)),
|
||||
if K == PivotIndex then
|
||||
Select = List[K]
|
||||
elseif K < PivotIndex then
|
||||
Select = select(List, Left, PivotIndex-1, K)
|
||||
else
|
||||
Select = select(List, PivotIndex+1, Right, K)
|
||||
end
|
||||
end.
|
||||
|
||||
partition(List, Left, Right, PivotIndex) = StoreIndex =>
|
||||
PivotValue = List[PivotIndex],
|
||||
swap(List,PivotIndex,Right),
|
||||
StoreIndex = Left,
|
||||
foreach(I in Left..Right-1)
|
||||
if List[I] @< PivotValue then
|
||||
swap(List,StoreIndex,I),
|
||||
StoreIndex := StoreIndex+1
|
||||
end
|
||||
end,
|
||||
swap(List,Right,StoreIndex).
|
||||
|
||||
% swap L[I] <=> L[J]
|
||||
swap(L,I,J) =>
|
||||
T = L[I],
|
||||
L[I] := L[J],
|
||||
L[J] := T.
|
||||
Loading…
Add table
Add a link
Reference in a new issue