Quickselect algorithm: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) (Added 11l) |
MaiconSoft (talk | contribs) (Added Delphi example) |
||
Line 934: | Line 934: | ||
{{out}} |
{{out}} |
||
<pre>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</pre> |
<pre>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</pre> |
||
=={{header|Delphi}}== |
|||
{{libheader| System.SysUtils}} |
|||
{{Trans|Go}} |
|||
<lang Delphi> |
|||
program Quickselect_algorithm; |
|||
{$APPTYPE CONSOLE} |
|||
uses |
|||
System.SysUtils; |
|||
function quickselect(list: TArray<Integer>; k: Integer): Integer; |
|||
procedure Swap(i, j: Integer); |
|||
var |
|||
tmp: Integer; |
|||
begin |
|||
tmp := list[i]; |
|||
list[i] := list[j]; |
|||
list[j] := tmp; |
|||
end; |
|||
begin |
|||
repeat |
|||
var px := length(list) div 2; |
|||
var pv := list[px]; |
|||
var last := length(list) - 1; |
|||
Swap(px, last); |
|||
var i := 0; |
|||
for var j := 0 to last - 1 do |
|||
if list[j] < pv then |
|||
begin |
|||
swap(i, j); |
|||
inc(i); |
|||
end; |
|||
if i = k then |
|||
exit(pv); |
|||
if k < i then |
|||
delete(list, i, length(list)) |
|||
else |
|||
begin |
|||
Swap(i, last); |
|||
delete(list, 0, i + 1); |
|||
dec(k, i + 1); |
|||
end; |
|||
until false; |
|||
end; |
|||
begin |
|||
var i := 0; |
|||
while True do |
|||
begin |
|||
var v: TArray<Integer> := [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]; |
|||
if i = length(v) then |
|||
Break; |
|||
Writeln(quickselect(v, i)); |
|||
inc(i); |
|||
end; |
|||
Readln; |
|||
end.</lang> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |