堆排序

  1. package sort;
  2.  
  3. public class Heap_Sort {
  4.  
  5. public static void main(String[] args) {
  6. // TODO 自动生成的方法存根
  7. Heap_Sort qs = new Heap_Sort();
  8. int[] Arr = {10,9,8,7,6,5,4,3,2,1};
  9. qs.heapSort(Arr);
  10. for(int i=0;i<Arr.length;i++){
  11. System.out.println(Arr[i]);
  12. }
  13. }
  14.  
  15. //调整函数
  16. public void headAdjust(int[] elements,int pos,int len){
  17. //将当前节点值进行保存
  18. int swap = elements[pos];
  19.  
  20. //定位到当前节点的左边的子节点
  21. int child = pos * 2 + 1;
  22.  
  23. //递归,直至没有子节点为止
  24. while(child < len){
  25. //如果当前节点有右边的子节点,并且右子节点较大的场合,采用右子节点和当前节点进行比较
  26. if(child + 1 < len && elements[child] < elements[child + 1]){
  27. child += 1;
  28. }
  29.  
  30. //比较当前节点和最大的子节点,小于则进行值交换,交换后将当前节点定位于子节点上
  31. if(elements[pos] < elements[child]){
  32. elements[pos] = elements[child];
  33. pos = child;
  34. child = pos * 2 + 1;
  35. }
  36. else{
  37. break;
  38. }
  39.  
  40. elements[pos] = swap;
  41. }
  42. }
  43.  
  44. //构建堆
  45. public void buildHeap(int[] elements){
  46. //从最后一个拥有子节点的节点开始,将该节点连同其子节点进行比较,
  47. //将最大的数交换与该节点,交换后,再依次向前节点进行相同交换处理,
  48. //直至构建出大顶堆(升序为大顶,降序为小顶)
  49. for(int i=elements.length/2; i>=0; i--){
  50. headAdjust(elements, i, elements.length);
  51. }
  52. }
  53.  
  54. public void heapSort(int[] elements){
  55. //构建堆
  56. buildHeap(elements);
  57.  
  58. //从数列的尾部开始进行调整
  59. for(int i=elements.length-1; i>0; i--){
  60. //堆顶永远是最大元素,故,将堆顶和尾部元素交换,将
  61. //最大元素保存于尾部,并且不参与后面的调整
  62. //alert(elements);
  63. int swap = elements[i];
  64. elements[i] = elements[0];
  65. elements[0] = swap;
  66. //alert(elements);
  67. //进行调整,将最大的元素调整至堆顶
  68. headAdjust(elements, 0, i);
  69. //alert(elements);
  70. }
  71. }
  72.  
  73. }

Java排序算法——堆排序的更多相关文章

  1. java排序算法(三):堆排序

    java排序算法(三)堆排序 堆积排序(HeapSort)是指利用堆积树这种结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法.辅助空间为O(1).最坏时间复杂度 ...

  2. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  3. java排序算法(四):冒泡排序

    java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...

  4. Java排序算法(三)

    Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...

  5. Java排序算法(一)

    Java排序算法(一) 排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,..., ...

  6. java排序算法之冒泡排序和快速排序

    总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...

  7. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  8. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  9. java排序算法(十):桶式排序

    java排序算法(十):桶式排序 桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征: 待排序列所有的值处于一个可枚举的范围之类: 待排序 ...

随机推荐

  1. 普通用户无法su到root用户

    问题描述: 普通用户切换回root用户时,密码输入正确仍然报密码错误. 问题解决: 1.1 检查/etc目录下passwd的权限 [root@dev /]# ll/etc/passwd-rw-r--r ...

  2. 基于jQuery+CSS3实现人物跳动特效

    分享一款基于jQuery+CSS3实现人物跳动特效.这是一款类似gif图片效果的CSS3动画特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=& ...

  3. zip伪加密

    简单的话来阐述 zip伪协议的意思是说本来不需要密码的zip文件然后通过修改标志位,然后就可以达到有密码的效果对吗?但是他实际是没有密码. 一个 ZIP 文件由三个部分组成: 压缩源文件数据区+压缩源 ...

  4. golang包管理的取巧

    常见的golang的包管理工具 glide 使用yaml做配置,语义化版本管理,可以设置镜像,下载x系列库,但是x系列库被第三方库依赖时会出现下载失败. dep 亲儿子,语义化版本管理,无法解决墙 v ...

  5. win8中完成进度

    public sealed partial class WorkItem : Page { private IAsyncAction _threadPoolWorkItem; private Manu ...

  6. Mysql 替换字段的一部分内容

    UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 字段名 REGEXP "替换前的字段值"; 例子: ...

  7. 【windows】查询占用端口的程序——记一次解决webloigc启动失败的过程

    . . . . . 我们经常使用的网络程序偶尔会遇到端口被占用的情况,但是却苦于无法找到占用端口的程序,这篇文章将教你两个命令,轻松排查端口占用问题. 关键命令: 1.查询端口占用:netstat - ...

  8. 认知计算 Cognitive Computing

    认知计算代表一种全新的计算模式,它包含信息分析,自然语言处理和机器学习领域的大量创新技术. Cognnitive computing refers to systems that learn at s ...

  9. [文件]Linux文本处理常用命令总结

    转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepa ...

  10. c++保存数据到TXT

    sprintf(filename, "/Users/anitafang/Documents/Datasets/test-tensorflow/002/annot3/%d.pts", ...