排序——堆排序
2017-06-19 00:09
246 查看
#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; }
相关文章推荐
- 选择排序之堆排序
- 关于堆排序建堆时间以及堆排序的分析之暑假学习记录
- 堆排序和选择排序的比较
- 算法——排序(六)堆排序
- 【Java】快速排序、归并排序、堆排序、基数排序实现总结
- 排序之五----堆排序
- 算法有插入排序,堆排序,合并排序,快速排序和stooge排序
- 合并排序及堆排序
- 第十五周——项目一—验证算法(6)选择排序之堆排序
- 小范围排序(堆排序)
- 堆排序,堆增删操作,Java数组实现堆排序
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- 2 -- 选择排序之堆排序
- 经典排序之 堆排序
- 排序(三)之堆排序
- 快速排序、堆排序、归并排序
- 选择排序:直接选择排序,堆排序
- 快速排序、堆排序、归并排序