堆排序
2017-11-22 23:19
169 查看
快速排序可以用来解决top(n)问题,堆排序用来解决有序的top(n)问题
- //堆排序:建堆,删除:向下调整,小的下沉,下沉到底
// 插入:向上调整,大的上浮,上浮到顶
- //堆排序:建堆,删除:向下调整,小的下沉,下沉到底
// 插入:向上调整,大的上浮,上浮到顶
//折半插入排序 #include<iostream> using namespace std; void swap(int a[], int i, int j){ //交换 int c = a[i]; a[i] = a[j]; a[j] = c; } void adjustDown(int a[], int k, int len){//大顶堆,向下调整,小的下沉到底 a[0] = a[k]; for (int i = 2*k; i <= len; i = i * 2){ if (i < len&&a[i + 1]>a[i]) i++; if (a[k] < a[i]){ swap(a,i,k); k = i; } } } void buildMaxHeap(int a[], int len){ //a[]是从1开始 for (int i = len / 2; i > 0; i--){ adjustDown(a, i, len); } } void dsort(int a[], int len){ buildMaxHeap(a, 9); for (int i=9; i > 1; i--){ swap(a, 1, i); adjustDown(a, 1, i-1); } for (int i = 1; i <= len; i++) cout << a[i] << endl; } int main(){ int a[] = { 0, 9,8,7,6,5,4,3,2,1 }; dsort(a, 9); }
相关文章推荐
- 堆排序
- 对字符串进行直接插入排序、堆排序、归并排序、快速排序实现以及性能分析
- 堆排序----C语言
- 快速排序与堆排序
- 排序算法集合(1)-Python实现的堆排序
- 算法导论读后感-之堆,堆排序,堆排序的应用
- 数据结构之排序算法二:堆排序,快速排序,归并排序
- 算法踩坑3-堆排序
- POJ 2388 Who's in the Middle(堆排序)
- 排序算法(七)——堆排序
- JAVA 堆排序
- 堆排序java实现
- 常用算法——堆排序
- 排序----堆排序
- 堆排序
- 堆与堆排序
- 堆排序
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- 冒泡排序、堆排序等常用算法总结
- 堆排序