java实现堆排序的小心得
来源:互联网 发布:淘宝货源免费代理代销 编辑:程序博客网 时间:2024/05/21 08:54
看着严老师的《数据结构》,对于当初使用c解决的算法,有点忘了,所以使用Java来实现一下堆排序。
堆排序的开始,是确定是要大顶堆还是小顶堆(这里确定使用小顶堆来做实现)
基本步骤
1:实现初始化堆,使得堆满足:父节点小于等于左右孩子。
1.1具体实现:从n/2开始,对于第n/2-第1个节点,都执行下沉操作
2:对于已经初始化堆,root就是最小值,将这个值与第N个值交换位置,并且弹出第n个值,现在的堆,root左右子树还是小顶堆,
所以,只需把root下沉即可构造出新的小顶堆。
3:重复2步骤,直到弹出n个值。
代码实现
private static void heapSort(int[] nums) {
if (nums==null||nums.length==0) {
return;
}else {
//这是初始化堆
for (int i = nums.length/2; i>=0; --i) {
heapAdjust(nums,i,nums.length);
}
//最小堆实现算法
for (int i = nums.length-1,tem=0; i>0; i--) {
//保存小值在数组结尾
tem=nums[0];
nums[0]=nums[i];
nums[i]=tem;
heapAdjust(nums, 0, i);
}
}
}
private static void heapAdjust(int[] nums, int i, int length) {
// TODO Auto-generated method stub
int rc=nums[i];
for (int j = 2*i; j <= length-1; j*=2) {//查看当前节点和子节点的大小关系
if (j< length-1) {
if (nums[j]>nums[j+1]) {
j++;
}
}
if (rc<=nums[j]) {
break;
}
//交换下标(向下沉)和对应的值
nums[i]=nums[j];
i=j;
}
nums[i]=rc;//这个本来顶下沉到的位置为i
}
- java实现堆排序的小心得
- 最小堆得实现;优先队列的堆实现;堆排序的时间复杂度nlgn;
- 堆排序的java实现
- 堆排序的JAVA实现
- Java 堆排序的实现
- 堆排序的JAVA实现
- 堆排序的JAVA实现
- 堆排序的Java实现
- 堆排序的java实现
- 堆排序的java实现
- 堆排序的java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的Java实现
- 堆排序的java实现
- java工作的一些小心得!
- Java新手村出来的一点小心得
- sql语句可以查出数据但是java数据中有的为null
- html中input只读属性readonly 和 disable的区别
- Zookeeper学习(五):ZKClient的使用
- c/c++学习 No.2 字符串的学习
- 多视角图像生成--Multi-View Image Generation from a Single-View
- java实现堆排序的小心得
- Android 百度地图marker中图片不显示的解决方案
- Android使用RxJava+Retrofit请求网络的小Demo
- 三种常见字符编码简介:ASCII、Unicode和UTF-8
- okHttp3.0获取网络数据
- 过滤驱动 文件访问重定向方法
- oop
- BZOJ 1036 [ZJOI2008]树的统计Count
- CorelDRAW中六种复制对象的方法分享