堆排序的C++实现

//heap.h file
//definition of Heap

class Heap {
public:
	Heap(int size);	/*size is number of integers to be sorted*/
	~Heap();
	void sort();/*heap sort*/
private:
	int *integers;
	int size;
	void heapAdjust(int i,int length);/*Adjust the integers to be a new heap*/
	void makeHeap();/*create a heap according to the given array of integers*/
	void input();
	void output();
};
//heap.cpp file
//implementation of Heap

#include "heap.h"
#include <iostream.h>


Heap::Heap(int size) {
	/*index from 1 to size*/
	integers = new int[size+1];
	this->size = size;
	input();
	makeHeap();
}
Heap::~Heap() {
	delete[] integers;
}
void Heap::input() {
	/*integers[0] unused at present*/
	cout<<"Please input "<<size<<" integers:\n";
	for (int i = 1;i <= size;i++) {
		cin>>integers[i];
	}
}
void Heap::heapAdjust(int i,int length) {
	/*here used, an auxiliary space*/
	integers[0] = integers[i];
	int j;
	/*if parent node No is 0, then left child node No is also 0.So start from 1*/
	for (j = 2 * i;j <= length;j *= 2) {
		if (j < length && integers[j] < integers[j+1]) {
			j++;
		}
		if (integers[0] >= integers[j]) {
			break;
		}
		integers[i] = integers[j];
		i = j;
	}
	integers[i] = integers[0];
}
void Heap::makeHeap() {
	for (int i = size / 2;i > 0;i--) {
		heapAdjust(i,size);
	}
}
void Heap::sort() {
	for (int i = size;i > 1;i--) {
		int tmp;
		tmp = integers[1];
		integers[1] = integers[i];
		integers[i] = tmp;

		heapAdjust(1,i-1);
	}
	output();

}
void Heap::output() {
	cout<<"The result of heap sorting is:\n";
	for (int i = 1;i < size;i++) {
		cout<<integers[i]<<" ";
	}
	cout<<integers[size]<<endl;
	
}
int main() {
	cout<<"Please input the number of integers to be sorted:\n";
	int number;
	cin>>number;

	Heap heap(number);/*create an object of Heap*/

	heap.sort();/*call the sort method*/
	return 0;
}

你可能感兴趣的:(C++,类,封装,堆排序)