随手写了一下,接口什么的肯定都不规范,先大概了解一下堆排序的过程。
#include<iostream> using namespace std; int a[100]; void swap(int i ,int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void fix(int i, int n) { if(i*2+1 > n)return; if(i*2+2 > n) { if(a[i]<a[i*2+1]) swap(i,i*2+!); } else { max = a[i*2+1] > a[i*2+2] ? i*2+1 : i*2+2; if(a[i] < a[max]) swap(i,max); fix(max,n); } } void makeheap(int n) { int i ; if(n%2 == 0) i = n/2-1; else i = n/2; while(i>=0) { fix(i,n); i--; } } void sortheap(int n) { makeheap(n); while(n>0) { swap(0,n); fix(0,--n); } } int main() { for(int i = 0 ; i < 50 ; i++) a[i] = i; sortheap(49); for(int i = 0 ; i < 50 ;i++)cout<<a[i]<<endl; return 0; }