Почему эта сортировка кучи не дает правильного вывода. выход должен быть отсортированным массивом, но какой-то случайный выход идет. вот ссылка https://ideone.com/4eD289. Также можно просмотреть этот код, чтобы он использовал современные возможности C++. каковы ваши предложенияheap sort in C++ output not correct
#include<iostream>
#include<algorithm>
#include<vector>
int max_heapify(std::vector<int>& v, int i){
int l = 2*i;
int r = 2*i + 1;
int largest = 0;
if((l < v.size()) && (v[l] > v[i])){
largest = l;
}
else{
largest = i;
}
if ((r<v.size()) && (v[r] > v[largest])){
largest = r;
}
if (largest != i){
std::swap(v[i], v[largest]);
max_heapify(v, largest);
}
return 0;
}
int build_max_heap(std::vector<int> &v){
for(int i = v.size()/2; i >= 0; i--){
max_heapify(v, i);
}
return 0;
}
int heap_sort(std::vector<int>& v){
build_max_heap(v);
int length = v.size();
for(int i = length-1 ; i>=1; i--)
std::swap(v[0], v[i]);
length--;
max_heapify(v, v[length]);
}
int main(){
std::vector<int> v = { 1, 2, 9, 8, 3, 4, 7, 6, 5};
heap_sort(v);
for(auto& e : v) std::cout<<e<<" ";
return 0;
}
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –