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

Содержимое удалено Содержимое добавлено
Отмена правки 59710 участника 94.232.52.24 (обсуждение)
Строка 320:
return 0;
}
 
== C (другой вариант) ==
 
//главная функция заполнение массива + распечатка после сортировки
#define n 10
int main ()
{
int a[n],i;
printf("enter array:\n");
for (i=0;i<n;i++)
{
scanf ("%d",&a[i]);
}
piramid(a, n);
printf ("\n array after sorting\n");
for (i=0;i<n;i++)
{
printf ("%d ",a[i]);
}
return 0;
}
//пирамидальная сортировка
void piramid (int *a,int n)
{
int i;
int t;
for (i=n/2;i>=0;i--)
postr(a, i, n);//функция построения пирамиды на массиве (см. ниже)
for (i=n-1;i>0;i--)
{
t = a[0];
a[0] = a[i];
a[i] = t;
postr(a,0,i);
}
return;
}
//построение пирамиды
void postr(int *a, int i, int n)
{
int t,r;
i++;
while (2*i<=n)
{
r=2*i;
if (r+1<=n&&a[r-1]<a[r])
r=r+1;
if (a[i-1]<a[r-1])
{
t=a[i-1];
a[i-1]=a[r-1];
a[r-1]=t;
i=r;
}
else return;
}
}