算法导论 习题6.2-5 用迭代法实现堆排序
2011-02-15 11:04
375 查看
#include <iostream> using namespace std; void swap(int array[] , int i , int j) { array[i] = array[i]+array[j]; array[j] = array[i]-array[j]; array[i] = array[i]-array[j]; } void MaxHeapify(int array[] , int i , int hSize) { int l = 2*i; int r = 2*i+1; int largest; while(l <= hSize) { if(array[l] > array[i]) { largest = l; } else { largest = i; } if(r<=hSize && array[r]>array[largest]) //It's r<=hSize other than r<hSize. { largest = r; } if(largest != i) { swap(array , i ,largest); i = largest; l = 2*i; r = 2*i+1; } else { break; } } } void BuildMaxHeap(int array[] , int hSize) { for(int i=hSize/2 ; i>=1 ; i--) { MaxHeapify(array , i , hSize); } } void HeapSort(int array[] , int length) { int hSize = length; BuildMaxHeap(array , hSize); for(int i=length ; i>=2 ; i--) { swap(array , 1 , i); hSize--; MaxHeapify(array , 1 , hSize); } } int main() { int a[99]; for(int i=1 ; i<99 ; i++) { a[i] = rand()%100; } HeapSort(a,99); for(int i=1 ; i<99 ; i++) { cout << a[i] << ' '; } return 0; }
相关文章推荐
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 算法导论 习题6.2-5 用迭代法实现堆排序
- 算法导论习题6.2代码实现
- 算法导论习题6-堆排序
- 算法导论-第六章-堆排序:基于最大堆的排序C++实现
- 算法导论Java实现-利用堆合并数组(习题6.5-8) 求高手指导
- 算法导论例题及课后习题代码实现——第六章
- 《算法导论的Java实现》 堆排序
- 算法导论堆排序实现
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 算法导论,堆排序,c实现。
- 算法导论10.1-2习题解答(用一个数组实现两个栈)
- 算法导论堆排序java实现
- 算法导论第二章课后习题代码实现
- 算法导论Java实现-堆排序(6.4章节)
- 算法导论三习题2.1-4代码实现
- 算法导论第三版习题6.2
- 算法导论(Introduction to Algorithms)之堆排序(C语言实现)
- 算法导论6.2-5习题解答(堆排序)
- 算法导论-----------堆排序研究 (堆排序原理及算法实现(最大堆))