heap.h:
#ifndef HEAP_H
#define HEAP_H
#define N 100
class Heap{
public:
Heap();
void max_heapify(int);
void build_max_heap();
void max_heap_sort();
void max_heap_insert(int);
int extract_max();
int heap_max(){
return num[1];
}
int for_sort[N];
int num[N];
int heap_size;
};
#endifheap.cpp:
#include "heap.h"
#include <iostream>
using namespace std;
Heap::Heap(){
for(int i = 0; i < N; i++){
num[i] = 0;
for_sort[i] = 0;
}
heap_size = 0;
}
void Heap::max_heapify(int i){
int l = 2*i;
int large = i; //care the initialization
if(l <= heap_size)
large = (num[i] > num[l]) ? i : l;
if(l+1 <= heap_size)
large = (num[large] > num[l+1]) ? large : l+1;
if(large != i){
int tmp = num[i];
num[i] = num[large];
num[large] = tmp;
max_heapify(large);
}
}
void Heap::build_max_heap(){
for(int i = heap_size/2; i > 0; i--)
max_heapify(i);
}
void Heap::max_heap_sort(){
int tmp = heap_size;
for(int i = heap_size; i > 1; i--){
int tmp = num[i];
num[i] = num[1];
num[1] = tmp;
heap_size--;
max_heapify(1);
}
heap_size = tmp;
for(int i = 1; i <= heap_size; i++)
for_sort[i] = num[i];
build_max_heap();
}
void Heap::max_heap_insert(int number){
if(heap_size == N-1)
cout << "failure:heap is full!\n";
else{
num[++heap_size] = number;
int i = heap_size;
while(i > 1){
if(num[i] <= num[i/2])
break;
int tmp = num[i];
num[i] = num[i/2];
num[i/2] = tmp;
i /= 2;
}
}
}
int Heap::extract_max(){
if(heap_size == 0)
cout << "failure:heap is empty!\n";
else{
int tmp = num[heap_size];
num[heap_size] = num[1];
num[1] = tmp;
heap_size--;
max_heapify(1);
return num[heap_size+1];
}
return 0;
}
main.cpp(用于测试):
#include "heap.h"
#include <iostream>
using namespace std;
int main() {
Heap a;
int b;
for(int i = 1; i < 11; i++){
cin >> a.num[i];
a.heap_size++;
}
a.build_max_heap();
cout << a.heap_max() << endl;
for(int i = 0; i < 5; i++){
cin >> b;
a.max_heap_insert(b);
}
cout << "the max:" << a.extract_max() << endl;
a.max_heap_sort();
for(int i = 1; i < a.heap_size+1; i++)
cout << a.for_sort[i] << " ";
cout << "\n" << a.heap_size << endl;
for(int i = 0; i < 5; i++){
cin >> b;
a.max_heap_insert(b);
}
a.max_heap_sort();
for(int i = 1; i < a.heap_size+1; i++)
cout << a.for_sort[i] << " ";
cout << "\n" << a.heap_size << endl;
return 0;
}
31万+

被折叠的 条评论
为什么被折叠?



