堆排序
2016-12-14 21:46
274 查看
void Swap( ElementType *a, ElementType *b ) { ElementType t = *a; *a = *b; *b = t; } void PercDown( ElementType A[], int p, int N ) { /* 改编代码4.24的PercDown( MaxHeap H, int p ) */ /* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */ int Parent, Child; ElementType X; X = A[p]; /* 取出根结点存放的值 */ for( Parent=p; (Parent*2+1)<N; Parent=Child ) { Child = Parent * 2 + 1; if( (Child!=N-1) && (A[Child]<A[Child+1]) ) Child++; /* Child指向左右子结点的较大者 */ if( X >= A[Child] ) break; /* 找到了合适位置 */ else /* 下滤X */ A[Parent] = A[Child]; } A[Parent] = X; } void HeapSort( ElementType A[], int N ) { /* 堆排序 */ int i; for ( i=N/2-1; i>=0; i-- )/* 建立最大堆 */ PercDown( A, i, N ); for ( i=N-1; i>0; i-- ) { /* 删除最大堆顶 */ Swap( &A[0], &A[i] ); /* 见代码7.1 */ PercDown( A, 0, i ); } }
相关文章推荐
- 堆排序
- C#堆排序实现方法
- 图文详解Heap Sort堆排序算法及JavaScript的代码实现
- php堆排序实现原理与应用方法
- C++堆排序算法的实现方法
- C语言实现基于最大堆和最小堆的堆排序算法示例
- 深入理解堆排序及其分析
- C语言对堆排序一个算法思路和实现代码
- 理解二叉堆数据结构及Swift的堆排序算法实现示例
- Python实现堆排序的方法详解
- 详解堆排序算法原理及Java版的代码实现
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JAVA算法起步之堆排序实例
- 深入解析堆排序的算法思想及Java代码的实现演示
- Java排序算法总结之堆排序
- 堆排序算法的讲解及Java版实现
- 堆排序/优先级队列
- js算法:heap sort 使用堆排序
- Python实现堆排序的方法详解