博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序算法
阅读量:4617 次
发布时间:2019-06-09

本文共 1496 字,大约阅读时间需要 4 分钟。

 堆排序将是所有的数据先建成一个堆,如大顶堆(最大的数据在堆顶),然后将堆顶数据和序列的最后一个数据交换,然后重新建堆,交换数据,依次下去,就可以排序所有的数据。由于不需要大量的递归或者多维的暂存数组,因此这对于数据量非常巨大的序列是很合适的,比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。

堆满足: r(i) >= r(2*i) 且 r(i) >= r(2 * i +1)    i=1,2...

调整是从(arr.length-1) / 2开始,即最后一个节点的父节点开始调整成堆

public class Heap{    /**     * 一次堆排序调整     * @param a 调整的数组     * @param pos   调整的初始元素位置     * @param len   调整的最后一个元素位置     */      public static void minAdjust(int[] arr, int pos, int len){          int tmp, child;          //pos * 2 + 1 <= len判断是否与子节点,注意是 (<= )      tmp = child调整子节点          for(tmp = arr[pos]; pos * 2 + 1 <= len; pos = child){               child = pos * 2 + 1; //子节点位置              //有两个子节点,且小的在后一个位置              if(child < len && arr[child] > arr[child+1]){                  child ++;              }              //子节点小于父节点的情况下,子节点移动到父节点的位置              if(arr[child] < tmp){                  arr[pos] = arr[child];              }else{                  break;              }          }          arr[child] = tmp;      }      public static void minHeap(int[] arry){                    int len = arry.length;          //建立小根堆          for(int i= len / 2 -1; i >= 0 ; i--){              minAdjust(arry, i, len-1);          }          //交换堆顶元素与堆最后一个元素,形成有序数组          for(int i= len-1; i>=0; i--){              int tmp = arry[0];              arry[0] = arry[i];              arry[i] = tmp;              minAdjust(arry, 0, i-1);           }      }}

 

转载于:https://www.cnblogs.com/huangyichun/p/6477899.html

你可能感兴趣的文章
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
查看>>
linux vi编辑器
查看>>
js树形结构-----(BST)二叉树增删查
查看>>
contract
查看>>
Python语言编程
查看>>
[poj 1469]Courses
查看>>
vue+element-ui实现表格checkbox单选
查看>>
测试开发学习进阶教程 视频&PDF
查看>>
C#基础-连接Access与SQL Server
查看>>
autofac
查看>>
MacOS 系统终端上传文件到 linux 服务器
查看>>
Excel导出POI
查看>>
兼容性
查看>>
自动执行sftp命令的脚本
查看>>
转 Merkle Tree(默克尔树)算法解析
查看>>
网络编程基础之socket编程
查看>>
各种浏览器的user-agent和
查看>>
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>