min heap
데이터 구조를 구현하기 위해 다음 프로그램을 작성했지만 예상되는 결과를 얻지 못했습니다.C++ 출력 순서
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
class MinHeap
{
vector<int> heap;
int size;
public:
MinHeap()
{
//cout<<"asc";
size=0;
}
void insert(int n);
void heapify(int i);
int extract_min();
int get_size()
{
return size;
}
};
void MinHeap::insert(int n)
{
int i=size, parent;
parent=(i-1)/2;
heap.push_back(n);
size++;
while(i>0)
{
if(heap[i]<heap[parent])
{
swap(heap[i], heap[parent]);
}
else
break;
i=parent;
parent=(i-1)/2;
}
}
void MinHeap::heapify(int i)
{
int left=2*i+1, right=2*i+2, min_index=i;
if(left<size && heap[left]<heap[min_index])
min_index=left;
if(right<size && heap[right]<heap[min_index])
min_index=right;
if(min_index!=i)
{
swap(heap[i], heap[min_index]);
heapify(min_index);
}
}
int MinHeap::extract_min()
{
int i=size-1, temp;
if(i>=0)
{
temp=heap[0];
heap[0]=heap[i];
size--;
heapify(0);
}
return temp;
}
int main()
{
int n, i, last=0, val, j;
MinHeap h;
h.insert(10);
h.insert(5);
h.insert(7);
h.insert(1);
cout<<h.extract_min()<<" "<<h.extract_min()<<" "<<h.extract_min()<<" "<<h.extract_min();
// cout<<h.extract_min()<<"\n";
// cout<<h.extract_min()<<"\n";
return 0;
}
출력 :10 7 5 1
예상 출력 : 나는 내가 주석 라인에서했던 것처럼 내가 (다른 라인을 인쇄 예상 출력을 얻을 그러나1 5 7 10
, 단지 메인에 return 0
이상).
만약 내가 너무 사소한 것을 놓친다면 미안.
또한 http://en.cppreference.com/w/cpp/algorithm/make_heap (표준 라이브러리는 이미 ['표준 : make_heap']로 힙을 관리 할 수있는 몇 가지 기능을 가지고 있습니다). – Holt
감사합니다. 그것은 'Min Heap'에 사용할 라이브러리 인 Max Heap을 구성한다고합니다 (또는 적절한'comp' 함수를 인수로 제공해야합니까?). – shiva
적절한 'comp'를 제공해야합니다 (예 :'std :: greater '). –
Holt