Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
56
Task/Quickselect-algorithm/CLU/quickselect-algorithm.clu
Normal file
56
Task/Quickselect-algorithm/CLU/quickselect-algorithm.clu
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
quick = cluster [T: type] is select
|
||||
where T has lt: proctype (T,T) returns (bool)
|
||||
aT = array[T]
|
||||
sT = sequence[T]
|
||||
rep = null
|
||||
|
||||
swap = proc (list: aT, a, b: int)
|
||||
temp: T := list[a]
|
||||
list[a] := list[b]
|
||||
list[b] := temp
|
||||
end swap
|
||||
|
||||
partition = proc (list: aT, left, right, pivotIndex: int) returns (int)
|
||||
pivotValue: T := list[pivotIndex]
|
||||
swap(list, pivotIndex, right)
|
||||
storeIndex: int := left
|
||||
for i: int in int$from_to(left, right-1) do
|
||||
if list[i] < pivotValue then
|
||||
swap(list, storeIndex, i)
|
||||
storeIndex := storeIndex + 1
|
||||
end
|
||||
end
|
||||
swap(list, right, storeIndex)
|
||||
return(storeIndex)
|
||||
end partition
|
||||
|
||||
_select = proc (list: aT, left, right, k: int) returns (T)
|
||||
if left = right then
|
||||
return(list[left])
|
||||
end
|
||||
|
||||
pivotIndex: int := left + (right - left + 1) / 2
|
||||
pivotIndex := partition(list, left, right, pivotIndex)
|
||||
if k = pivotIndex then
|
||||
return(list[k])
|
||||
elseif k < pivotIndex then
|
||||
return(_select(list, left, pivotIndex-1, k))
|
||||
else
|
||||
return(_select(list, pivotIndex + 1, right, k))
|
||||
end
|
||||
end _select
|
||||
|
||||
select = proc (list: sT, k: int) returns (T)
|
||||
return(_select(sT$s2a(list), 1, sT$size(list), k))
|
||||
end select
|
||||
end quick
|
||||
|
||||
start_up = proc ()
|
||||
po: stream := stream$primary_output()
|
||||
vec: sequence[int] := sequence[int]$[9,8,7,6,5,0,1,2,3,4]
|
||||
|
||||
for k: int in int$from_to(1, 10) do
|
||||
item: int := quick[int]$select(vec, k)
|
||||
stream$putl(po, int$unparse(k) || ": " || int$unparse(item))
|
||||
end
|
||||
end start_up
|
||||
Loading…
Add table
Add a link
Reference in a new issue