算法导论 堆排序
2017-04-06 16:47
211 查看
#include <stdio.h> #include <limits.h> void MaxHeapify(int a[],int i,int len) { int l=i*2,r=i*2+1; int largest=i; while(l<=len || r<=len) { if(l<=len && a[l]>a[i]) { largest=l; } if(r<=len && a[r]>a[largest]) { largest=r; } if(largest != i) { int temp=a[i]; a[i]=a[largest]; a[largest]=temp; i=largest; } else break; l=i*2,r=i*2+1; } } void printA(int a[],int len) { for(int i=1;i<=len;i++) { printf("%d ",a[i]); } } void buildMaxHeap(int a[],int len) { for(int i=len/2;i>=1;i--) { MaxHeapify(a,i,len); } } void heapSort(int a[],int len) { buildMaxHeap(a,len); int i; for(i=len;i>=2;i--) { int temp=a[i]; a[i]=a[1]; a[1]=temp; MaxHeapify(a,1,i-1); } } void main() { int a[15]={INT_MAX,27,17,3,16,13,10,1,5,7,12,4,8,9,0}; heapSort(a,14); printA(a,14); getchar(); }
相关文章推荐
- 算法导论读后感-之堆,堆排序,堆排序的应用
- 《算法导论》第6章 堆排序 (4)Young氏矩阵
- 算法导论_堆排序
- 日常记录:《算法导论》学习笔记之三—堆排序
- 算法导论---堆排序
- 《算法导论》第6章 堆排序 个人笔记
- 算法导论:堆排序
- 算法导论读后感-之堆,堆排序,堆排序的应用
- 算法导论,堆排序,c实现。
- 算法导论学习笔记——堆排序
- 算法导论 第6章 堆排序
- 算法导论--堆排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 《算法导论》第六章----堆排序
- 跟着《算法导论》学习——堆排序
- 算法导论:堆排序
- 算法导论-第六章-堆排序:基于最大堆的排序C++实现
- 《算法导论》读书笔记之第6章 堆排序
- 算法导论 第六章:堆排序
- 《算法导论的Java实现》 7 堆排序