堆排序
来源:互联网 发布:单片机ram rom flash 编辑:程序博客网 时间:2024/06/11 00:56
#include <iostream>#include <ctime>using namespace std;void adjust(int *a, int i, int n){ int large, l; while(i*2+1 < n) { large = i; l = i*2 + 1; if(a[l]>a[i]) large = l; if(l+1<n && a[l+1]>a[large]) large = l+1; if(large == i) return ; swap(a[i], a[large]); i = large; }}void heap_sort(int* a, int n){ int m = (n-2)/2; int i; for(i=m; i>=0; i--) adjust(a, i, n); for(i=n-1; i>0; i--) { swap(a[i], a[0]); adjust(a, 0, i); }}int main(){ int len = 20; int *a = new int[len]; srand((unsigned)time(0)); int i; cout<<"before sort:"<<endl; for(i=0; i<len; i++) { a[i] = rand()%100; cout<<a[i]<<" "; } cout<<endl<<"after sort:"<<endl; heap_sort(a, len); for(i=0; i<len; i++) { cout<<a[i]<<" "; } cout<<endl; return 0;}