堆排序
#ifndef HEAPSORT_H #define HEAPSORT_H #include <iostream> using namespace std; /************************************************* Function: // build_heap Description: // 堆性质维护函数 Input: // array:输入待排序数组 // num: 待处理数组元素位置 // size: 数组长度 Output: // 无 Return: // 无 *************************************************/ template<class T> void heap_maintaince(T *array, int size, int num) { int left_child = num * 2; int right_child = num * 2 + 1; int max_index = num; T temp; if(left_child <= size && array[left_child - 1] > array[num - 1]) { max_index = left_child; } if(right_child <= size && array[right_child - 1] > array[max_index - 1]) { max_index = right_child; } if(max_index != num) { temp = array[num - 1]; array[num - 1] = array[max_index - 1]; array[max_index - 1] = temp; heap_maintaince(array, size, max_index); } else { return; } } /************************************************* Function: // build_heap Description: // 创建堆 Input: // array:输入待排序数组 // num: 数组长度 Output: // 无 Return: // 无 *************************************************/ template<class T> void build_heap(T *array, int num) { int i; for(i = num / 2; i > 0; --i) { heap_maintaince(array, num, i); } #ifdef _DEBUG for(i = 0; i < num; ++i) { cout << array[i] << " "; } cout << endl; #endif // _DEBUG } /************************************************* Function: // build_heap Description: // 排序 Input: // array:输入待排序数组 // num: 数组长度 Output: // 无 Return: // 无 *************************************************/ template<class T> void heap_sort(T *array, int num) { build_heap(array, num); int i; T temp; for(i = num; i >= 2;) { temp = array[0]; array[0] = array[i - 1]; array[i - 1] = temp; --i; heap_maintaince(array, i, 1); } } #endif
堆积排序(Heapsort)是指利用堆积树(堆)来设计的一组排序算法,在其中最主要的是如何保持队性质的函数heap_maintaince。算法导论里边有比较详细易懂的叙述。
参考文献:算法导论。