数据结构——堆排序
2010-08-12 10:52
239 查看
#include <iostream> using namespace std; #define LT(a,b) ( (a) < (b) ) #define Listsize 100 //表空间的大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType的类型可根据实际情况而定,这里假设为int typedef struct { DataType data[Listsize]; int len; //顺序表长度 }*SeqList; typedef SeqList HeapType; void HeapAdjust(HeapType &H, int low, int length) { int temp=H->data[low]; for(int j=2*low; j<=length; j*=2) { //沿值较大的孩子结点向下筛选 if(j<length && LT(H->data[j], H->data[j+1])) ++j; //j为值较大的记录的下标 if( !LT(temp, H->data[j]) ) break; //rc应该插入在位置s上 H->data[low] = H->data[j]; low=j; } H->data[low]=temp; //插入 }//HeapAdjust //堆排序 void HeapSort(HeapType &H) { //对顺序表H进行堆排序 for(int i=H->len/2; i>0; --i) //先把H->data[1...H.len]建成大顶堆 HeapAdjust(H, i, H->len); for(i=H->len; i>1; --i) { swap(H->data[1], H->data[i]); //H->data[1]是当前堆中最大的元素,将它调到最后面, //这样一次把最大的元素调到最后面就实现堆排序了 HeapAdjust(H,1,i-1); //再将剩下的i-1个元素重新调整为大顶堆 } }//HeapSort int main() { HeapType H; H=(HeapType)malloc(sizeof(HeapType)); if(!H) { cout<<"分配空间失败!"<<endl; } H->len=10; H->data[1]=40; H->data[2]=55; H->data[3]=49; H->data[4]=73; H->data[5]=12; H->data[6]=27; H->data[7]=98; H->data[8]=81; H->data[9]=64; H->data[10]=36; HeapSort(H); //堆排序 for(int i=1; i<=H->len; i++) cout<<H->data[i]<<" "; cout<<endl; return 0; }
相关文章推荐
- 数据结构——堆排序
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构基础加强之最小堆的实现与堆排序
- 数据结构6-排序算法(直接插入排序、希尔排序、快速排序、归并排序和堆排序)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构与算法——堆排序
- 数据结构之排序(五)堆排序
- 【数据结构与算法】堆排序
- 数据结构实验之排序四:寻找大富翁(堆排序)
- 数据结构基础 之 二叉堆实现堆排序
- 数据结构与算法学习-堆排序
- 【数据结构与算法】【排序】堆排序的代码实现
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构基础7.3:堆排序
- 数据结构实验之排序四:寻找大富翁(堆排序)
- 数据结构学习(十一)、堆排序
- 数据结构上机实验-希尔排序,快速排序,堆排序
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 数据结构与算法之排序:堆排序、归并排序及快速排序
- 堆排序-----数据结构