《算法导论》第6章堆排序 #include <bits/stdc++.h> using namespace std; #define PARENT(i) i/2 #define LEFT(i) 2*i #define RIGHT(i) 2*i+1 /** * 最大堆化,保证子树最大值在子树的根 * @param A 数组 * @param len 数组长度 * @param i 当前位置 */ void maxHeapify(int A[], int len, int i){ int l = LEFT(i); int r = RIGHT(i); int largest = -1; if (l <= len && A[l] > A[i]){ largest = l; } else { largest = i; } if (r <= len && A[r] > A[largest]){ largest = r; } if (largest != i){ int temp = A[i]; A[i] = A[largest]; A[largest] = temp; maxHeapify(A, len, largest); } } /** * 建最大堆 * @param A 数组 * @param len 数组长度 */ void buildMaxHeap(int A[], int len){ for (int i = len/2; i >= 1; --i) { maxHeapify(A, len, i); } } /** * 堆排序 * @param A 数组 * @param len 数组长度 */ void heapSort(int A[], int len){ buildMaxHeap(A, len); for (int i = len; i >= 2; --i) { int temp = A[1]; A[1] = A[i]; A[i] = temp; len--; maxHeapify(A,len,1); } } int main(){ //数组A[0]忽略,从A[1]开始 int A[] = {0,4,1,3,2,16,9,10,14,8,7}; int len = sizeof(A)/ sizeof(A[0]) - 1; heapSort(A, len); for (int i = 1; i <= len; ++i) { cout<<A[i]<<" "; } cout<<endl; }
《算法导论》伪代码C++实现--堆排序
最新推荐文章于 2021-02-28 12:21:26 发布