Реализации алгоритмов/Сортировка/Пирамидальная: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Вариант № 2: Не была учтена ситуация, когда отсутствует правый ребёнок.
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 2:
 
==[[w:Си (язык программирования)|C]]==
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
 
Строка 56:
return 0;
}
</syntaxhighlight>
</source>
 
==[[w:C++|C++]]==
===Вариант № 1===
<sourcesyntaxhighlight lang="cpp">
#include <iterator>
 
Строка 112:
pop_heap( first, last-- );
}
</syntaxhighlight>
</source>
 
===Вариант № 2===
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
 
Строка 190:
return 0;
}
</syntaxhighlight>
</source>
 
==[[w:C Sharp|C#]]==
===Вариант № 1===
<sourcesyntaxhighlight lang="csharp">
static Int32 add2pyramid(Int32[] arr, Int32 i, Int32 N)
{
Строка 266:
System.Console.ReadLine();
}
</syntaxhighlight>
</source>
 
===Вариант № 2===
<sourcesyntaxhighlight lang="csharp">
public class Heap<T>
{
Строка 342:
heap.HeapSort();
}
</syntaxhighlight>
</source>
Здесь T - любой тип, на множестве элементов которого можно ввести [[w:Частично упорядоченное множество|отношение частичного порядка]].
 
==[[w:Java|Java]]==
<sourcesyntaxhighlight lang="java">
/**
* Класс для сортировки массива целых чисел с помощью кучи.
Строка 453:
}
</syntaxhighlight>
</source>
 
==[[w:Pascal|Pascal]]==
Строка 459:
Вместо '''«SomeType»''' следует подставить любой из арифметических типов (например [[integer]]).
 
<sourcesyntaxhighlight lang="pascal">
procedure HeapSort (var sequence: array of T; count: Word);
 
Строка 499:
end
end;
</syntaxhighlight>
</source>
Здесь нет вывода и ввода массива. Либо случайный, либо пользователем.
 
Строка 506:
N — количество элементов массива
 
<sourcesyntaxhighlight lang="pascal">
procedure HeapSort (var sequence: array of T; N: Integer);
var i: Integer;
Строка 557:
end
end;
</syntaxhighlight>
</source>
 
===Вариант № 3===
<sourcesyntaxhighlight lang="pascal">
{ Процедура для обмена значений переменных }
procedure swap (var x, y: integer);
Строка 604:
end
END.
</syntaxhighlight>
</source>
 
==[[w:Perl|Perl]]==
<sourcesyntaxhighlight lang="perl">
@out=(6,4,2,8,5,3,1,6,8,4,3,2,7,9,1)
$N=@out+0;
Строка 636:
}
}
</syntaxhighlight>
</source>
 
==[[w:Python|Python]]==
Строка 644:
 
Проверить работу любой из функций можно добавив, например, следующий код (Python 3; для Python 2 следует опустить скобки в операторах <code>print</code>):
<sourcesyntaxhighlight lang="python">
count = 30 # Количество значений в последовательности
# Заполняем последовательность значениями, расположенными в порядке, обратном желаемому:
Строка 655:
print("Упорядоченная последовательность:")
print(sequence)
</syntaxhighlight>
</source>
 
===Вариант № 1===
<sourcesyntaxhighlight lang="python">
def heap_sort (sequence):
 
Строка 684:
sequence[0], sequence[index] = sequence[index], sequence[0]
sift_down(0, index)
</syntaxhighlight>
</source>
 
===Вариант № 2===
<sourcesyntaxhighlight lang="python">
def heap_sort (sequence):
 
Строка 717:
swap_items(index, 0)
sift_down(0, index)
</syntaxhighlight>
</source>
 
==[[w:Rust (язык программирования)|Rust]]==
Строка 725:
 
Проверить работу любой из функций можно добавив, например, следующий код (следует учитывать, что в Rust массивы до 32 элементов могут выводиться макросами <code>print!</code> и <code>println!</code>; для более длинных придётся писать собственную функцию вывода):
<sourcesyntaxhighlight lang="rust">
fn main () {
let mut sequence = [0i32; 30]; // Массив из 30 элементов
Строка 743:
println!("Упорядоченная последовательность:\n{:?}", sequence);
}
</syntaxhighlight>
</source>
 
===Вариант № 1===
<sourcesyntaxhighlight lang="rust">
fn heap_sort <T: PartialOrd> (sequence: &mut[T]) {
let length = sequence.len();
Строка 786:
} { /* Пустое тело цикла (имитация цикла с постусловием)*/ }
}
</syntaxhighlight>
</source>
 
===Вариант № 2===
По сравнению с предыдущим вариантом элементы последовательности также должны быть ''копируемыми'' (реализовывать типаж <code>Copy</code>).
<sourcesyntaxhighlight lang="rust">
fn heap_sort <T: PartialOrd + Copy> (sequence: &mut[T]) {
fn sift_down <T: PartialOrd + Copy> (sequence: &mut[T], root: usize, limit: usize) {
Строка 828:
}
}
</syntaxhighlight>
</source>
 
{{BookCat | filing = deep}}