堆排序(java实现)
堆排序算法的步骤:
首先将给定的无序数组排成一个大顶堆
交换大顶堆的首尾元素,然后删除尾部元素,将剩余元素再构建大顶堆,循环直到到达根节点。
若array[0,…,n-1]表示一颗完全二叉树的顺序存储模式,则双亲节点指针和孩子结点指针之间的内在关系如下:
任意一节点指针 i:父节点:i==0 ? null : (i-1)/2
左孩子:2*i + 1
右孩子:2*i + 2
代码:
public int[] sort(int[] arr) {int len =arr.length;if(len<1)return arr;help(arr,len);while(len>0) {int temp=arr[len-1];arr[len-1]=arr[0];arr[0]=temp;gene(arr, 0,len-1);//交换大顶堆首尾,然后重建大顶堆len--;}return arr;}public void help(int[] arr,int len) {for(int i=len/2-1;i>=0;i--) {gene(arr,i,len);}}public void gene(int[] arr,int n,int len) {//主要功能根据给定的数组构建大顶堆int maxindex =n;//n*2+1左子节点if(n*2+1<len && arr[n*2+1]>arr[maxindex]) {maxindex=n*2+1;}if(n*2+2<len && arr[n*2+2]>arr[maxindex]) {maxindex=n*2+2;}if(maxindex!=n) {int temp=arr[maxindex];arr[maxindex]=arr[n];arr[n]=temp;gene(arr,maxindex,len);//重要}}
堆排序(java实现)相关推荐
- 堆排序java实例_堆排序(示例代码)
前言:网上有很多堆排序的案例,我只想写自己堆排序. 一:堆结构 即:一个父节点最多只能有两个子节点(可以没有),如下图 图1 图2 图3 图4 二: 数组 ...
- 堆排序-Java小顶堆排序
二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值. 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或等于任何一个子 ...
- java 小根堆 排序_堆排序(java实现)
堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性 来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...
- 堆排序Java实现以及使用场景
堆排序是基于大小堆来实现的,利用数组中左右子树的数学规律来进行构建最大树或者是最小树,在这基础上将最大数或者是最小树下沉,并将树的长度减1,直到树的长度为1,最后数组即为排序后的数组 场景:跟快排一样 ...
- 大顶堆排序java实现
堆的性质: (1)性质:完全二叉树或者是近似完全二叉树: (2)分类:大顶堆:父节点不小于子节点键值,小顶堆:父节点不大于子节点键值:图展示一个最小堆: (3)左右孩子:没有大小的顺序. (4)堆 ...
- 堆维护、堆建立、堆排序-- java实现
//堆有三个操作.维护堆,建堆,堆排序. public class heapsort { // 维护最大堆public static void maxheap(int nums[], int i,in ...
- 堆排序 java实现_堆排序Java实现(递归方式非递归方式)
很早就学习了堆排序但当时没有用代码实现,现在再去想实现已经忘光光啦┑( ̄Д  ̄)┍,于是就去网上搜了一番,发现没有一篇我能认真看完的文章,没办法就是没耐心,就是笨呗...好了,言归正传= ̄ω ̄= 了解 ...
- 十大经典排序算法之堆排序(Java代码实现)
算法原理 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近视完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点.堆排序可以说 ...
- 堆排序和归并排序 java代码实现
文章目录 堆排序 java代码实现 单元测试 归并排序 java代码实现 单元测试 堆排序 java代码实现 package csdn.dreamzuora.sort;import java.util ...
- 数据连接java面试题
本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 一.面向对象的特征都有哪些?他们在使用过程中的优势是什么? (1)对象唯一性 (2)抽象性 (3)继承性 (4)多态性 1.易 ...
最新文章
- 落地三大产业,深耕两个领域,百度AI的这一年|李彦宏乌镇行
- 电脑安装python为什么显示的是程序丢失-python报错:无法启动此程序,因为计算机中丢失...
- 美国读本科出勤率低被休学,无法毕业怎么办
- linux之如何复制文件夹所有文件到其它文件夹
- 360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...
- raspberry pi 家族
- Openjudge_ 2.1基本算法之枚举_1809 两倍 C++ scratch
- Javascript表达式中连续的 和 || 之赋值区别
- 期权“不公平”是认识上的错误
- SQL Prompt 快捷键
- 《数据库系统概念》20-恢复系统
- html相同标签替换,html替换把多有标签替换成p标签
- JS实现点击复制目标内容
- Python根据mask在原图上进行标记
- Speedoffice(ppt)中如何插入表格
- 最简单易懂的ios p12证书 和描述文件的创建,IPA上传,最完整的ios上架苹果商店教程
- AT学习报告一 软件的初步使用
- 2022广东省安全员A证第三批(主要负责人)试题及模拟考试
- Java API--IO流整理
- LFI、RFI、PHP封装协议安全问题学习