《算法导论》排序算法

来源:互联网 发布:zepto.js的animate 编辑:程序博客网 时间:2024/06/11 19:54

1.堆排序

#include <iostream>#define N 100using namespace std;int parent(int i) {return i / 2;}int left(int i) {return 2 * i;} int right(int i) {return 2 * i + 1;}void maxHeapify(int array[], int i, int heapSize) {int largest, temp;int l = left(i);int r = right(i);if(l < heapSize && array[l] > array[i])largest = l;elselargest = i;if(r < heapSize && array[r] > array[largest])largest = r;if(largest != i) {temp = array[i];array[i] = array[largest];array[largest] = temp;maxHeapify(array, largest, heapSize); }}void buildMaxHeap(int array[], int n) {int heapSize = n;for(int i = (n - 1) / 2; i >=  0; i--)maxHeapify(array, i, heapSize);}void heapSort(int array[], int n) {int i, temp, heapSize;heapSize = n;buildMaxHeap(array, n);for(i = n - 1; i >= 0; i--) {temp = array[0];array[0] = array[i];array[i] = temp;heapSize--;maxHeapify(array, 0, heapSize);}}int main() {freopen("001.in", "r", stdin);int i, n;int array[N];cin>>n;for(i = 0; i < n; i++)cin>>array[i];heapSort(array, n);for(i = 0; i < n; i++)cout<<array[i]<<endl;return 0;}

测试数据

1427 17 3 16 13 10 1 5 7 12 4 8 9 0