Несколько проблем в вашем коде.
Начинается с heapify()
:
Вы вычисляете левую и правую часть элемента кучи как-
l = 2 * i;
r = 2 * i + 1;
Предположим что i
это 0
. В этом случае l
будет отображаться как 0
, что неверно. Это должно быть
l = 2 * i + 1;
r = 2 * i + 2;
Здесь
if(largest != i){
std::strcpy(arr[largest], arr[i]);
вы копируете arr[i]
в arr[largest]
. Из-за этого строка с индексом largest
массива arr
будет перезаписана строкой с i
местоположением массива arr
. Вместо этого вы должны поменять их местами:
if(largest != i){
std::swap(arr[largest], arr[i]);
^^^^^^^^^
Теперь проблемы в heapSort()
:
Здесь
for(int i = size - 1; i > 0; i--){
std::strcpy(arr[0], arr[i]);
вы делаете ту же ошибку при копировании arr[i]
на arr[0]
. Вместо этого вы должны поменять их местами:
for(int i = size - 1; i > 0; i--){
std::swap(arr[0], arr[i]);
^^^^^^^^^
Теперь перейдите к main()
:
Проверьте это
// printing array
for(int i = 0; i < 0; i++){
^^^^^
Это l oop тело никогда не будет выполнить из-за ошибки в условии l oop (i < 0
). Условие l oop должно быть i < size
:
for(int i = 0; i < size; i++){
^^^^^^^^