Я пытаюсь реализовать сортировку кучи для массива из 10 элементов в порядке возрастания. я после этих шагов -куча сортировка C - неправильный вывод
heap_sort (ARR, size_array):
build_max_heap(arr)
for(parent=size_array to 1):
swap(arr[1],arr[parent])
size_array = size_array - 1;
max_heapify(arr,1,size);
Но мой вывод полностью перепутались. Я не могу понять, где я ошибаюсь.
Это мой вклад -
20 15 10 1 15 9 2 6 7 9
Мой выход build_max_heap -
20 15 10 7 15 9 2 6 1 9
Мой отсортированный массив такой же, как выход build_max_heap -
20 15 10 7 15 9 2 6 1 9
Что я делаю неправильно ?
Вот мой код:
void max_heapify(int *arr,int i,int size)
{
//i is the index of parent node. 2i is left child, 2i+1 is right
int left = (2*i)+1;
int right = (2*i)+2;
int max;
int temp;
//check which node is the max, parent or one of its children. store max idx.
if ((left<=size)&&(arr[left]>arr[i]))
max = left;
else
max = i;
if ((right<=size)&&(arr[right]>arr[max]))
max = right;
//swap parent with max.
if(max!=i)
{
temp = arr[max];
arr[max]=arr[i];
arr[i]=temp;
max_heapify(arr,max,size);
}
}
void build_max_heap(int *arr,int size)
{
for(int i = size/2; i>=0; i--)
{
max_heapify(arr,i,size);
}
}
void heap_sort(int *arr, int size)
{
int temp;
build_max_heap(arr,size);
int i = size;
while(size>0)
{
//swap
temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
//reduce size
size = size -1;
//heapify
max_heapify(arr,0,size);
}
}
Пройдите код, построчный по строке, в отладчике, чтобы увидеть, что он работает по назначению. –