최대 힙을 만들려고합니다. 논리가 간단합니다. 부모가 자식 노드 중 하나보다 작 으면이를 바꿉니다. I 제가최대 힙 배열 표현
90 36 17 25 26 7 1 2 3 19
그렇게 배열 표현 90 36 17 25 26 7 1 2 3 19
아직 코드의 출력
2 7 26 25 19 17 1 90 3 36
사용하고
void maxHeapify(int i , int *a , int n){
int largest = i;
int left = (i * 2) + 1;
int right = (i * 2) + 2;
if(left < n && a[ largest] < a[ left ])
largest = left;
if(right < n && a[ largest ] < a[right])
largest = right;
if(largest != i){
swap(a[i], a[largest]);
maxHeapify(largest , a, n);
}
}
int main(){
int n;
int * a;
cout << "Number of elements : ";
cin >> n ;
a = new int[n];
for(int i = 0; i < n ; i++){
cin >> a[i];
}
for(int i = n/2 -1 ; i >= 0 ; i--){
maxHeapify(i , a, n);
}
for(int i = 0; i < n ; i++){
cout << a[i] << " ";
}
return 0;
}
를 사용하여 구현하려
90 36 26 25 19 17 1 7 3 2
나는 이것을보고 많은 튜토리얼에서 많은 동일한 코드를 발견했다. 어떻게 출력이 배열의 트리를 표현하지 않습니까? 나는 그것을 오해 했습니까?
설명해 주셔서 감사합니다.
지금까지 디버거를 사용하지 않았다면 디버거를 사용하는 방법을 배우는 것이 가장 좋습니다. 디버거를 사용하면 변수를 모니터링하고 값을 검사하면서 한 줄씩 코드를 단계별로 실행할 수 있습니다. –
['std :: make_heap'] (http://en.cppreference.com/w/cpp/algorithm/make_heap)을 사용하십시오. –