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

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 120:
 
 
void iswap (int &n1, int &n2)
{
int temp = n1;
n1 = n2;
Строка 126 ⟶ 127 :
}
 
int main ()
{
unsigned const int n = 100u100;
int a[n];
 
// Для наглядности заполняем массив числами от n до 0.
for (unsignedint i = 0u0; i < n; i++i) {
a[i] = n - i;
std::cout << a[i] << ' ';
Строка 139 ⟶ 141 :
// Сортирует по возрастанию. Чтобы получить сортировку по убыванию,
// поменяйте знаки сравнения в строчках, помеченных /*(знак)*/
unsignedint sh = 0u0; // Смещение
bool b;
do {
{
b = false;
for (unsignedint i = 0u0; i < n; i++i) {
{
if (i * 2 + 2 + sh < n) {
{
if ((a[i + sh] > /*<*/ a[i * 2 + 1 + sh]) || (a[i + sh] > /*<*/ a[i * 2 + 2 + sh])) {
{
if (a[i * 2 + 1 + sh] < /*>*/ a[i * 2 + 2 + sh]) {
{
iswap(a[i + sh], a[i * 2 + 1 + sh]);
b = true;
}
else if (a[i * 2 + 2 + sh] < /*>*/ a[i * 2 + 1 + sh]) {
{
iswap(a[i + sh], a[i * 2 + 2 + sh]);
b = true;
Строка 157 ⟶ 166 :
// с её помощью можно отсортировать пирамиду
// состоящую всего лишь из трёх элементов
if (a[i * 2 + 2 + sh] < /*>*/ a[i * 2 + 1 + sh]) {
{
iswap(a[i * 2 + 1 + sh], a[i * 2 + 2 + sh]);
b = true;
}
}
else if (i * 2 + 1 + sh < n) {
{
if (a[i + sh] > /*<*/ a[ i * 2 + 1 + sh]) {
{
iswap(a[i + sh], a[i * 2 + 1 + sh]);
b = true;
Строка 173 ⟶ 186 :
 
std::cout << std::endl << std::endl;
for (unsignedint i = 0u0; i < n; i++i)
std::cout << a[i] << ' ';