爲什麼這種堆排序沒有給出正確的輸出。輸出應該是一個排序的數組,但一些隨機輸出即將到來。這裏是鏈接https://ideone.com/4eD289。任何人都可以查看此代碼,以便它使用現代C++功能。你有什麼建議C++輸出堆排序不正確
#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;
}
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –