排序——堆排序
#include <iostream> using namespace std; void swap( int k[], int i,int j ) { int temp; temp = k[i]; k[i] = k[j]; k[j] = temp; } void HeapAdjust( int k[], int s,int n ) { int i,temp; temp = k[s];//存放当前要调整的结点 for( i=2*s; i <= n;i*=2 )//2*s就是左孩子 2*s+1就是右孩子 i*=2表示调到下一个树 { if( i < n && k[i] < k[i+1] )//确定不是最后一个结点 和 如果右孩子要大过左孩子 { i++; } if( temp >= k[i]) { break; } k[s] = k[i]; s = i; } k[s] = temp; } void HeapSort( int k[], int n ) { int i; for( i=n/2; i > 0;i-- ) // { HeapAdjust( k, i, n );//调整大顶堆 k表示数组 i表示双亲结点 n个数 } for( i=n; i > 1;i-- ) { swap(k, 1, i);//互换 元素 HeapAdjust( k, 1, i-1 ); } } int main() { int i ,a[10] = {-1,5,2,6,0,3,9,1,7,4}; HeapSort(a,9); for( i=1; i < 10 ;i++ ) { cout << a[i]; } cout << endl; return 0; }
作者: kent鹏
出处: http://www.cnblogs.com/xieyupeng/
关于作者:专注JAVAEE领域,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。