算法导论 第六章优先队列C++实现
2011-02-15 16:21
736 查看
#include <iostream> #include <cstdlib> 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]; } int Parent(int i) { if(i>1) { return i/2; } else { return 0; } } 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; } } } int HeapMaximum(int array[]) { return array[1]; } int HeapExtractMax(int array[] , int hSize) { if(hSize < 1) { cout << "underflow"; exit(0); } int max = array[1]; array[1] = array[hSize]; hSize--; MaxHeapify(array , 1 , hSize); return max; } void HeapIncreaseKey(int array[] , int i , int key) { if(key < array[i]) { cout << "new key is smaller than current key"; exit(0); } array[i] = key; if(Parent(i) == true) { while(i>1 && array[Parent(i)]<array[i]) { swap(array , i , Parent(i)); i = Parent(i); } } } void HeapDelete(int array[] , int i , int& hSize) { array[i] = array[hSize]; hSize--; int key = array[i]; if(key <= array[Parent(i)]) { MaxHeapify(array , i ,hSize); } else { while(i>1 && array[Parent(i)]<key) { array[i] = array[Parent(i)]; i = Parent(i); } } } int main() { return 0; }
相关文章推荐
- 算法导论 第六章优先队列C++实现
- C++实现优先队列
- C++实现优先队列——最小堆,d路堆及配对堆
- 优先队列(C++实现)
- 迷宫最短路径的C++实现(队列:广度优先)
- 《算法导论》中广度优先搜索的实现 c++
- 优先队列的c++实现
- 优先队列的应用 C++实现
- 迷宫最短路径的C++实现(队列:广度优先)
- C++ 优先队列的简单实现
- C++非递归队列实现二叉树的广度优先遍历
- 用最大堆实现优先队列(c++)
- 算法导论:c++堆排序&优先队列
- 最小堆优先队列C++实现
- 【数据结构】实现大小堆也叫二叉堆(类似c++中的优先队列)
- 算法导论 第23章 最小生成树 斐波那契堆实现优先队列
- 《算法导论》第六章----优先级队列(代码实现+部分练习)
- 算法导论第六章优先队列(二)
- 基于算法导论6.5用最大堆实现的优先队列(C++)