Java排序算法——堆排序
堆排序
- package sort;
- public class Heap_Sort {
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- Heap_Sort qs = new Heap_Sort();
- int[] Arr = {10,9,8,7,6,5,4,3,2,1};
- qs.heapSort(Arr);
- for(int i=0;i<Arr.length;i++){
- System.out.println(Arr[i]);
- }
- }
- //调整函数
- public void headAdjust(int[] elements,int pos,int len){
- //将当前节点值进行保存
- int swap = elements[pos];
- //定位到当前节点的左边的子节点
- int child = pos * 2 + 1;
- //递归,直至没有子节点为止
- while(child < len){
- //如果当前节点有右边的子节点,并且右子节点较大的场合,采用右子节点和当前节点进行比较
- if(child + 1 < len && elements[child] < elements[child + 1]){
- child += 1;
- }
- //比较当前节点和最大的子节点,小于则进行值交换,交换后将当前节点定位于子节点上
- if(elements[pos] < elements[child]){
- elements[pos] = elements[child];
- pos = child;
- child = pos * 2 + 1;
- }
- else{
- break;
- }
- elements[pos] = swap;
- }
- }
- //构建堆
- public void buildHeap(int[] elements){
- //从最后一个拥有子节点的节点开始,将该节点连同其子节点进行比较,
- //将最大的数交换与该节点,交换后,再依次向前节点进行相同交换处理,
- //直至构建出大顶堆(升序为大顶,降序为小顶)
- for(int i=elements.length/2; i>=0; i--){
- headAdjust(elements, i, elements.length);
- }
- }
- public void heapSort(int[] elements){
- //构建堆
- buildHeap(elements);
- //从数列的尾部开始进行调整
- for(int i=elements.length-1; i>0; i--){
- //堆顶永远是最大元素,故,将堆顶和尾部元素交换,将
- //最大元素保存于尾部,并且不参与后面的调整
- //alert(elements);
- int swap = elements[i];
- elements[i] = elements[0];
- elements[0] = swap;
- //alert(elements);
- //进行调整,将最大的元素调整至堆顶
- headAdjust(elements, 0, i);
- //alert(elements);
- }
- }
- }
Java排序算法——堆排序的更多相关文章
- java排序算法(三):堆排序
java排序算法(三)堆排序 堆积排序(HeapSort)是指利用堆积树这种结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法.辅助空间为O(1).最坏时间复杂度 ...
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(四):冒泡排序
java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- Java排序算法(一)
Java排序算法(一) 排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,..., ...
- java排序算法之冒泡排序和快速排序
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- java排序算法(十):桶式排序
java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...
随机推荐
- 普通用户无法su到root用户
问题描述: 普通用户切换回root用户时,密码输入正确仍然报密码错误. 问题解决: 1.1 检查/etc目录下passwd的权限 [root@dev /]# ll/etc/passwd-rw-r--r ...
- 基于jQuery+CSS3实现人物跳动特效
分享一款基于jQuery+CSS3实现人物跳动特效.这是一款类似gif图片效果的CSS3动画特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=& ...
- zip伪加密
简单的话来阐述 zip伪协议的意思是说本来不需要密码的zip文件然后通过修改标志位,然后就可以达到有密码的效果对吗?但是他实际是没有密码. 一个 ZIP 文件由三个部分组成: 压缩源文件数据区+压缩源 ...
- golang包管理的取巧
常见的golang的包管理工具 glide 使用yaml做配置,语义化版本管理,可以设置镜像,下载x系列库,但是x系列库被第三方库依赖时会出现下载失败. dep 亲儿子,语义化版本管理,无法解决墙 v ...
- win8中完成进度
public sealed partial class WorkItem : Page { private IAsyncAction _threadPoolWorkItem; private Manu ...
- Mysql 替换字段的一部分内容
UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 字段名 REGEXP "替换前的字段值"; 例子: ...
- 【windows】查询占用端口的程序——记一次解决webloigc启动失败的过程
. . . . . 我们经常使用的网络程序偶尔会遇到端口被占用的情况,但是却苦于无法找到占用端口的程序,这篇文章将教你两个命令,轻松排查端口占用问题. 关键命令: 1.查询端口占用:netstat - ...
- 认知计算 Cognitive Computing
认知计算代表一种全新的计算模式,它包含信息分析,自然语言处理和机器学习领域的大量创新技术. Cognnitive computing refers to systems that learn at s ...
- [文件]Linux文本处理常用命令总结
转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepa ...
- c++保存数据到TXT
sprintf(filename, "/Users/anitafang/Documents/Datasets/test-tensorflow/002/annot3/%d.pts", ...