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

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

hot3.png

堆排序是基于完全二叉树的排序。把一个完全二叉树调整为堆,以及每次堆顶元素交换后进行调整的时间复杂度均为O(lgn),所以堆排序的时间复杂度为O(nlgn)。堆排序的空间复杂度为O(1).堆排序是一种不稳定的排序。

堆排序的步骤为:

  1.将待排序的数组构建为一个最大堆

  2.在最大堆的基础上排序
  (1)把堆顶a[0]元素(最大的元素)和当前最大堆的最后一个元素交换
  (2)最大堆元素减一
  (3)调整跟节点使它满足最大堆 

java代码实现:

import java.util.Arrays;/** * 堆排序 * 1.将待排序的数组构建为一个最大堆 * 2.在最大堆的基础上排序 * 	(1)把堆顶a[0]元素(最大的元素)和当前最大堆的最后一个元素交换 *  (2)最大堆元素减一 *  (3)调整跟节点使它满足最大堆  */public class HeapSort {	/**	 *@Description	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub		int arr[] = {10,50,32,5,76,9,40,88};		heapSort(arr);		System.out.println(Arrays.toString(arr));	}		public static void heapSort(int arr[]){		initMaxHeap(arr);		int n = arr.length,temp;		for(int i=n-1;i>=0;i--){			//把堆顶a[0]元素(最大的元素)和当前最大堆的最后一个元素交换			temp = arr[0];			arr[0] = arr[i];			arr[i] = temp;			//逐渐缩小堆的大小			createMaxHeap(arr,0,i);		}	}		//初始化最大堆	public static void initMaxHeap(int arr[]){		int n = arr.length;		//从第一个非叶节点开始构造最大堆,注意完全二叉树的性质		for (int i = (n-1)/2; i >= 0; i--) {			createMaxHeap(arr,i,n);		}	}		/**	 *@Description 创建最大堆	 * @param arr 需要创建堆的数组	 * @param i 开始下标	 * @param n 堆的大小	 */	public static void createMaxHeap(int arr[],int i,int n){		int left = 2*i+1;		int	right = 2*i+2;		int largest = i;		if(left
arr[largest]){ largest = left; } if(right
arr[largest]){ largest = right; } if(largest!=i){ int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; //递归地构建孩子节点,使其满足最大堆的特性 createMaxHeap(arr,largest,n); } } }

转载于:https://my.oschina.net/hujunil1/blog/165843

你可能感兴趣的文章
系统及其内核修复
查看>>
16Gb FC实测带宽几何、四端口HBA呢?
查看>>
重新format namenode后,datanode无法正常启动
查看>>
斐波那契的四种求法
查看>>
利用Excel Web App管理你的电子表格
查看>>
写用户文档的三把利器
查看>>
dd for windows
查看>>
飞塔命令模式下配置IPMAC绑定 V4.0
查看>>
JSF call EJB comp Demo
查看>>
Hybris ECP(Enterprise Commerce Platform)的调试
查看>>
EqualLogic控制器算法研究一:基本管理
查看>>
现任明教教主PKI课程 第一部分:加密技术基本原理
查看>>
SCOM 2012系列⑪单台服务器性能图监控
查看>>
android自定义控件(理论知识学习 +自定义属性的讲解)
查看>>
docker malware分析
查看>>
*#06# 新购手机 指令测试
查看>>
Okhttp设置http缓存,在没有网络的情况下加载http缓存里面的内容
查看>>
Worktile中百万级实时消息推送服务的实现
查看>>
Lessons Learned from Building and Running MHN, the World's Largest Crowdsourced Honeynet
查看>>
SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
查看>>