堆排序算法
2011-11-30 11:53
162 查看
#include<iostream> using namespace std; #define LEFT(x) (x<<1) #define RIGHT(x) ((x<<1) + 1) #define PARENT(x) (x>>1) int heapSize; int arraySize; void HeapFeature(int a[], int i) { int largest; int l = LEFT(i); int r = RIGHT(i); if(l <= heapSize && a[l] > a[i]) { largest = l; } else { largest = i; } if(r <= heapSize && a[r] > a[largest]) { largest = r; } if(largest != i) { int temp; temp = a[i]; a[i] = a[largest]; a[largest] = temp; HeapFeature(a, largest); } } void CreateMaxHeap(int a[]) { for(int i = ((arraySize/2)); i > 0; i--) { HeapFeature(a, i); } } void HeapSort(int a[]) { CreateMaxHeap(a); for(int i = arraySize; i > 0; i--) { int temp; temp = a[1]; a[1] = a[i]; a[i] = temp; cout << temp << endl; heapSize -= 1; HeapFeature(a, 1); } } int main() { int n; cout << "input the number you want to sort:" << endl; cin >> n; int *a = new int[n + 1]; a[0] = n; cout << "input the values that you want to sort:" << endl; for(int i = 1; i<= n; i++) { int x; cin >> x; a[i] = x; } heapSize = n; arraySize = n; HeapSort(a); system("pause"); return 0; }