第六章堆排序之“建堆BUILD-MAX-HEAP”(递归版)
来源:互联网 发布:lance phan软件 编辑:程序博客网 时间:2024/05/16 15:23
自下向上对每一个结点或者只对每个非叶结点使用“保持堆的性质”即“堆调整”MAX-HEAPIFY
#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void MaxHeapIfy(int *a,int i,int heapSize){int left=i<<1;int right=(i<<1)+1;int tmp;int largest=i;if(left<=heapSize&&a[i]<a[left]){largest=left;}if(right<=heapSize&&a[largest]<a[right]){largest=right;}if(i!=largest)//不加这个判断可能会产生死循环,递归一个劲的在i这打转 {tmp=a[i];a[i]=a[largest];a[largest]=tmp;MaxHeapIfy(a,largest,heapSize);}}void Output(int *a,int len){int i=1;for(i=1;i<=len;i++){printf("%d ",a[i]);}printf("\n");}void BuildMaxHeap(int *a,int heapSize){int i=0;for(i=BUFFER_SIZE/2;i>0;i--){MaxHeapIfy(a,i,heapSize);}}int main(){int i=0;int a[BUFFER_SIZE+1];//第一个位置即a[0]不用,这样计算子节点的索引简单点。 memset(a,0,sizeof(a));srand((unsigned)time(NULL));for(i=1;i<=BUFFER_SIZE;i++){a[i]=rand()%BUFFER_SIZE;}printf("随机生成数组:"); Output(a,BUFFER_SIZE);BuildMaxHeap(a,BUFFER_SIZE);printf("建立的最大堆为:");Output(a,BUFFER_SIZE);system("pause");return 0;}
- 第六章堆排序之“建堆BUILD-MAX-HEAP”(递归版)
- 第六章堆排序之“建堆BUILD-MAX-HEAP”(迭代版)
- 第六章堆排序之“保持堆的性质MAX-HEAPIFY”(递归版)
- 第六章堆排序之“保持堆的性质MAX-HEAPIFY”(迭代版,练习6.2-5)
- 算法导论(build the heap recursively 递归建堆)
- 第六章堆排序之“删除最大堆中的指定元素HEAP-DELETE”(练习6.5-7)
- 最大堆排序输出(max heap sort)
- 第六章堆排序之“堆排序HEAPSORT”
- 排序算法之堆(heap)
- 第六章:堆排序
- 第六章--堆排序
- 第六章 堆排序
- 第六章:堆排序
- 【算法导论】第六章之堆排序
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆(Heap)排序算法
- 堆排序(Heap-Sort)
- 赚下跌的钱!基金定投也能成千万富翁
- CSDN博客
- 11g OCM升级考试技巧与建议
- 学习笔记------海量数据处理题集锦与bit-map详解
- ubuntuServer网络设置
- 第六章堆排序之“建堆BUILD-MAX-HEAP”(递归版)
- linux下搭建nutch-1.3
- 全屏
- SQL Server 对 Image字段进行操作
- ubuntu配置samba服务器
- OSGeo-Live 5.0
- 曾育文:竞争性强的关键词该如何去优化
- ubuntu软件包管理器
- 第六章堆排序之“建堆BUILD-MAX-HEAP”(迭代版)