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

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 7:
#define MAXL 1000
 
#define root i+sh
void swap (int *a, int *b)
#define left 2*i+1+sh
{
#define right 2*i+2+sh
int t = *a;
 
*a = *b;
void swap (int *a, int *b) { int t = *a; *a = *b; *b = t; }
*b = t;
 
}
int main()
{
int a[MAXL], n, i, sh = 0, b = 0;
scanf ("%i", &n);
for (i = 0; i < n; ++i) scanf ("%i", &a[i]);
scanf ("%i", &a[i]);
while (1)
{
Строка 24 ⟶ 23 :
for (i = 0; i < n; ++i)
{
if (i*2 + 2 + shright < n)
{
if (a[i+shroot] > a[i*2 + 1 + shleft] || a[i + shroot] > a[i*2 + 2 + shright])
break;{
{
if (a[i*2+1+shleft] < a[i*2+2+shright])
{
swap (&a[i+shroot], &a[i*2+1+shleft]);
b = 1;
}
else if (a[i*2+2+shright] < a[i*2+1+shleft])
{
swap (&a[i+shroot], &a[i*2+2+shright]);
b = 1;
}
}
}
}
else if (i * 2 + 1 + shleft < n)
{
if (a[i+shroot] > a[i*2+1+shleft])
{
{
swap (&a[i+shroot], &a[i*2+1+shleft]);
b = 1;
}
}
}
}
if (!b) sh++;
if (sh + 2 == n) break;
break;
}
for (i = 0; i < n; ++i)
for (i = 0; i < n; i++) printf ("%i%c", a[i], (i != n - 1) ? ' ' : '\n');
return 0;
}