堆排序
来源:互联网 发布:网游年龄数据库 编辑:程序博客网 时间:2024/06/18 18:19
堆排序我个人觉得是8大排序里边最难的一个,因为它不仅仅是一个排序算法,还涉及到一种常用的数据结构,大根堆。这是一个面试最容易问到的排序,因为它涉及到的知识点非常多,下面就对堆排序做一个总结。
首先堆排序,从算法的角度出发,分为3步:
第一步:构建初始的大根堆
public static int[] buildMaxHeap(int[] array){
for(int i = (array.length-2)/2;i>=0;i--){
adjustDownToUp(array,i,array.length);
}
}
第二步:编写构建大根堆的adjustDownToUp方法
public static void adjustDownToUp(int [] array,int k,int length){
int temp = array[k];
for(int i = 2*k+1;i<length-1;i = 2*i+1){
if(array[i]>a[i+1]) i++;
if(temp>a[i]) break;
else{
array[k] = array[i];
k = i;
}
}
array[k] = temp;
}
第三步:编写heapSort主方法
public static void heapSort(int[] array){
array = buildMaxHeap(array);
for(int i = array.length - 1;i>=1;i--){
int temp = array[0];
array[0] = array[i];
array[i] = temp;
adjustDownToUp(array,0,i);
}
}
以上就是堆排序的所有代码过程,详细的介绍我觉得以下文章写得不错
http://www.cnblogs.com/CherishFX/p/4643940.html
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- JAVA 接口和抽象类
- 单链表的逆序打印方法简单分析
- (转)机器中的幽灵:人工智能在金融市场的影响、风险及监管
- 卡特兰数
- C语言简单操作MYSQL数据库的增删查找
- 堆排序
- [面试] 自动洗扑克牌
- android_95_layout_weight
- LinuxC语言实现递归删除目录
- LeetCode——16. 3Sum Closest
- sql where 查询时用到 1=1的原因
- 导入sql文件到mysql
- 归并排序 逆序数 Codeforces 414 C
- 单个ipk编译过程