首页 > 代码库 > 堆/堆排序
堆/堆排序
<h1>原理参考:http://blog.csdn.net/morewindows/article/details/6709644</h1>
/**********************************************************/ //堆插入 void MinHeapfixup(int a[],int n,int num){ a[n] = num; int j,temp; temp = num; j = (n-1)/2; while (j >= 0 && n != 0) { if(temp >= a[j]) break; a[n] = a[j]; n = j; j = (n-1)/2; } a[j] = temp; } //堆删除 void MinHeapfixdown(int a[],int i,int n){ int j,temp; temp = a[i]; j = 2*i + 1; while (j < n) { if(j+1 < n && a[j+1] < a[j]) ++j; if(temp <= a[j]) break; a[i] = a[j]; i = j; j = 2*i +1; } a[i] = temp; } void HeapDelete(int a[],int n){ swap(a[0],a[n-1]); MinHeapfixdown(a,0,n-1); } //数组堆化 void MakeHeap(int a[],int n){ for (int i = n/2-1; i>=0; --i) { MinHeapfixdown(a,i,n); } } //堆排序 void HeapSort(int a[],int n){ for (int i=n-1; i>=1; --i) { swap(a[0],a[i]); MinHeapfixdown(a,0,i); } } int _tmain(int argc, _TCHAR* argv[]) { int a[] = {9,12,17,30,50,20,60,65,4,19}; int i = 0; cout<<"原数组"<<endl; while (i<10) { cout<<a[i]<<" "; ++i; } cout<<endl; MakeHeap(a,10); i = 0; cout<<"数组堆化"<<endl; while (i<10) { cout<<a[i]<<" "; ++i; } cout<<endl; HeapSort(a,10); i = 0; cout<<"堆化后排序"<<endl; while (i<10) { cout<<a[i]<<" "; ++i; } system("pause"); return 0; }
堆/堆排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。