堆排序
来源:互联网 发布:手机写作辅助软件 编辑:程序博客网 时间:2024/06/06 11:01
#include<iostream>using namespace std;int left(int i){return 2*i;}//左孩子int right(int i){return 2*i+1;}右孩子void print_array(int *a,size_t length){for(size_t i = 1;i < length;i++){cout<<a[i]<<" ";}}//输出数组void heap_modify(int *a,int i,int heapsize){while(i<=heapsize){int l =left(i);int r = right(i);int largest=i,temp;if(l<=heapsize&&a[i]<a[l])largest =l ;if(r<=heapsize&&a[largest]<a[r])largest =r ;//得到左右孩子中的最大值if(i==largest)break;temp=a[largest];a[largest] = a[i];a[i] = temp;//交换i = largest;//下一个节点//print_array(a,11);//cout<<endl;//cout<<largest <<" ";}}void built_heap(int *a,int length){for(size_t i = length/2;i>0;i--){heap_modify(a,i,length);}}//建堆void heap_sort(int *a,int length){built_heap(a,length);int heapsize = length-1;for(size_t i = length-1;i>=2;i--){int temp;temp = a[1];a[1] = a[i];a[i] = temp;heapsize--;heap_modify(a,1,heapsize);//最大值拿掉,重新建堆}}int main(){int a[11] = {0,10,9,8,7,6,5,4,3,2,1};//数组下标0位不使用,从1位开始cout<<"before heapsort"<<endl;print_array(a,11);cout<<endl;heap_sort(a,11);;cout<<"after heapsort"<<endl;print_array(a,11);}
//解释如注释
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Python 快速入门
- opencv中使用K-近邻分类算法KNN
- swift中防止闭包循环引用
- MVC异常处理
- 有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
- 堆排序
- php数组遍历常用方式
- leetcode笔记:Isomorphic Strings
- eclipse tomcat maven热部署
- zoj 3494(ac自动机+数位dp)
- 去除vss源代码管理
- JAVA_SE基础——42.final修饰符
- 第四周项目1 建立单链表
- POJ - 3087 Shuffle'm Up(15.10.10 搜索专题)模拟