Первое замечание: вам не нужен цикл над j, и здесь у вас есть проблема. Это правда, что вы должны присвоить y значение j, но сразу после этого вы уменьшаете j в цикле, так что в итоге вы получаете y - 1.
Вам нужно либо просто изменить строку j = y;
на j = y + 1
, либо изменить цикл на
y = (j - 1) / 2
while (c[j] > c[y]){
temp = c[y];
c[y] = c[j];
c[j] = temp;
j = y;
y = (j - 1) / 2;
}
Второй момент: пожалуйста, не сжимайте код таким образом. Новая строка после скобки стала более читабельной.
EDIT:
Полная реализация в C ++ выглядит так:
int heapy(int *a, int *c, int z)
{
for (int i = 0; i < z; i++){
c[i] = a[i];
int j = i;
int y = (j - 1) / 2;
while(c[j] > c[y]){
int temp = c[y];
c[y] = c[j];
c[j] = temp;
j = y;
y = (j - 1) / 2;
}
}
}
Если массив элементов i представляет собой кучу, вам следует добавить элемент в его конец и поменять его местами с его родителями, если они меньше его.