《排序算法》——堆排序(大顶堆,小顶堆,Java)
堆的定义例如以下:
若将和此次序列相应的一维数组(即以一维数组作此序列的存储结构)看成是一个全然二叉树,
则全然二叉树中每个节点的值的都大于或等于随意一个字节的值(假设有的话)。称之为大顶堆。
则全然二叉树中每个节点的值的都小于或等于随意一个字节的值(假设有的话),称之为小顶堆。
由此,若序列{k0,k1,…,k(n-1)}是堆。则堆顶元素(或全然二叉树的根)必为序列中n个元素的最小值(或最大值)。
倘若给堆中每个节点都赋予一个整数值标签,根节点被标记为0。对于每个标记为i的节点,其左子节点(若存在的话)被标记为2*i+1,其右子节点(若存在的话)被标记为2*i+2,对于一个标记为i的非根节点,其父节点被标记为(i-1)/2。使用这个标记,我们可以将堆存储在数组中。节点存储在数据中的位置就使其标签。
package sort; import java.util.Arrays; /*
* 堆排序
* 堆的定义:满足 Ki <= K2i+1 Ki<=K2i+2 为小顶堆,满足 Ki >= K2i+1 Ki>=K2i+2 为大顶堆
* 此为大顶堆的代码实例,小顶堆相似
*/
public class duiSort { static int[] arr = {
16,7,3,20,17,8 //定义待排序数组
};
public static void main(String[] args) { buildHeap();//建立大顶堆并排序
System.out.println("排序好的为:" + Arrays.toString(arr));
} private static void buildHeap() {
// TODO Auto-generated method stub
int len = arr.length;
for(int i =len/2 -1 ;i>=0;i--) //建立大顶堆
{
sortHeap(i,len);
}
System.out.println("建立好的大顶堆例如以下:" + Arrays.toString(arr));
for(int j = len-1; j >0; j --) //对大顶堆进行排序
{
swap(0,j);
sortHeap(0,j);
}
} private static void sortHeap(int i, int len) {
// TODO Auto-generated method stub
int left = 2*i+1; //定义左节点
int right = 2*i +2; //定义右节点
int large = 0; //存放三个节点中最大节点的下标
if(len >left && arr[left] > arr[i]) //假设左孩子大于根节点 将左孩子下标赋值给large
large = left;
else //否之。将根节点下标赋值给large
large = i; if(len > right && arr[right] > arr[large])
large = right; //若右孩子节点大于根节点,把右孩子节点下标赋值给large if(large != i) //若最大节点的下标不等于根节点的下标时,交换其值
{
swap(large,i);
sortHeap(large,len);
}
}
//交换相应下标值
private static void swap(int m, int n) {
// TODO Auto-generated method stub
int temp ;
temp = arr[m];
arr[m] = arr[n];
arr[n] = temp;
}
}
《排序算法》——堆排序(大顶堆,小顶堆,Java)的更多相关文章
- 使用 js 实现十大排序算法: 堆排序
使用 js 实现十大排序算法: 堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列: 小顶堆:每个 ...
- 八大排序算法——堆排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演示 二.思路分析 先来了解下堆的相关概念:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆:或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆.如 ...
- JavaScript排序算法——堆排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java排序算法——堆排序
堆排序 package sort; public class Heap_Sort { public static void main(String[] args) { // TODO 自动生成的方法存 ...
- Java大顶和小顶
http://blog.sina.com.cn/s/blog_651c9a360100o7y1.html http://blog.csdn.net/cnbird2008/article/details ...
- 排序算法-堆排序(Java)
package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className HeapSort * @date ...
- 排序算法——交换排序(冒泡排序、快速排序)(java)
一.冒泡排序 时间复杂度:O(n^2) 公认最慢的排序,每次把最大/最小的放一边,原理: [57,68,59,52] [57,68,59,52] [57,59,68,52] [57,59,52,68] ...
- 排序算法(冒泡,选择,快速)Java 实现
冒泡 排序: public static void Bubblesort(int [] a) { for(int x=0;x<=a.length-1;x++) { for(int y=0;y&l ...
- 十大经典排序算法总结——JavaScrip版
首先,对于评述算法优劣术语的说明: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:即排序后2个相等键值的顺序和排序之前它们的顺序相同 不稳定:如果a原本在b的前面,而a=b,排序之后a ...
- 九大排序算法Demo
1. 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...
随机推荐
- openresty总结
协程 1.例如当获取的数据没有前后依赖关系时,可以使用ngx.thread.spawn和ngx.thread.wait同时从数据库不同的库.表或者不同来源(mysql,redis等)获取数据. htt ...
- Problem O: 逆序输出——C语言初学者百题大战之二十
#include<stdio.h> int main() { int a,b,c,d,e,n; scanf("%d",&n); a=n/; b=n%/; c=n ...
- 使用MR求解多个矩阵的乘积之后
首先介绍涉及到的知识点,如下: 1)value的类型是IntArrayWritable,将整型数组值取出的方法有两种. a.其一,就是使用value的toArray()方法,返回值是一个Object ...
- maven将jar文件加入到maven库
mvn install:install-file-DgroupId=包名-DartifactId=项目名-Dversion=版本号-Dpackaging=jar-Dfile=jar文件所在路径 1,本 ...
- iOS 国际化最新最全教程+如何快速国际化一个现成APP
同学面试时遇到一个问题,面试官问他,有一个现成的APP马上要上线了,怎么在不改原来代码,也不改xib.storyboard里的文字的情况下快速实现国际化.这里应同学请求写下此教程.反正国际化的步骤都要 ...
- Ghost下的gho镜像分区工具
直接gho镜像还原,有fat32和ntfs 链接: https://pan.baidu.com/s/1dGl6v65 密码: tjuz
- 记录一次Elasticsearch线上部署后出现:org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []的问题解决
说明:ES部署了3个节点,而一般情况只要这三个节点的IP其中一个都可以连接,Web端口使用的是9500,Client连接使用的是9600,调用程序使用了ES原生Client进行连接. 解决方法: 1. ...
- 在WPF中合并两个ObservableCollection
WPF中的ObservableCollection是一个非常常用的集合对象,我们可以通过将它绑定到ListBox之类的集合控件上时,当集合发生变更时,会同步更新到界面上.但是,有的时候我们需要合并两个 ...
- Jquery的Split二次分割
<script type="text/javascript">var str="Q1#k1:Q2#k2"var str2=str.split(':' ...
- How to determine what causes a particular wait type
By: Paul Randal Posted on: March 18, 2014 6:55 pm [Edit 2016: Check out my new resource – a comp ...