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