堆排序算法(Java实现)
将待排序的序列构造成一个大顶堆(从大到小排要构造成小顶堆)。此时,整个序列的最大值就是堆顶的根节点,将他和末尾元素交换,然后将剩余的length-1个节点序列重新构造成新的堆。重复执行,便能得到一个有序序列。
 package sort;
 public class HeapSort {
     static void heapSort(int []a,int len){
         int i;
         for(i=len/2;i>=0;i--){ /*把a[]构造成一个大顶堆*/
             HeapAdjust(a,i,len);
         }
         for(i=len;i>0;i--){
             swap(a,0,i); /*交换堆顶最大元素和堆尾最小元素*/
             HeapAdjust(a,0,i-1);  /*把交换后的堆a[0,i-1],再次构造成大顶顶,使堆顶元素为最大值*/
         }
     }
     static void HeapAdjust(int []a,int start,int len){
         int temp,j;
         temp=a[start];
         for(j=2*start;j<=len;j*=2){   /*从index最大的有孩子的节点开始筛选,堆排*/
             if(j<len&&a[j]<a[j+1])    /*是index=j的元素为较大的元素*/
                 j++;
             if(temp>=a[j])
                 break;
             a[start]=a[j];            /*将较大元素赋值给父节点*/
             start=j;
         }
         a[start]=temp;
     }
     static void swap(int a[],int low,int high){
         int temp=a[low];
         a[low]=a[high];
         a[high]=temp;
     }
     public static void main(String []args){
         int[] b = { 49, 38, 65, 97, 76, 13, 27, 50 };
         heapSort(b, b.length - 1);
         for(int w:b)
             System.out.print(" "+w);
     }
 }
堆排序算法(Java实现)的更多相关文章
- 堆排序算法 java 实现
		堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ... 
- 排序系列 之 堆排序算法 —— Java实现
		基本概念: 二叉堆是完全二叉树或者是近似完全二叉树. 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 一般将二叉堆简称 ... 
- 算法-java代码实现堆排序
		堆排序 第7节 堆排序练习题 对于一个int数组,请编写一个堆排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2 ... 
- 堆排序算法的java实现
		堆积排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O ... 
- 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解
		一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ... 
- 排序算法入门之堆排序(Java实现)
		堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序.堆排序总的运行时间为O(NlonN). 堆的概念 堆是以数组作为存储结构. 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那 ... 
- 【java排序】 归并排序算法、堆排序算法
		一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ... 
- 八大排序算法Java实现
		本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ... 
- 排序算法(Java实现)
		这几天一直在看严蔚敏老师的那本<数据结构>那本书.之前第一次学懵懵逼逼,当再次看的时候,发觉写的是非常详细,非常的好. 那就把相关的排序算法用我熟悉的Java语言记录下来了.以下排序算法是 ... 
随机推荐
- Day8--------------RPM包管理
			nginx.tar.gz:源码,编译安装 RPM:redhat package manage,二进制 增.删.查 1.增 package------>ls|less------------> ... 
- layui  子页面向父页面传值
			实现功能:单击确定按钮将选中的id传到父页面并关闭当前子页面. 首先在父页面定义一个函数: //分配产品 function ChooseAdidValues(v) { if (v != "& ... 
- 22)django-中间件
			一:中间件介绍 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后, django会根据自己的规则在合适的时机执行中间件中相应的方法. 在dj ... 
- Confluence 6 在数据源连接中启用校验查询
			确定 Confluence 在数据库连接池中校验数据库连接: 停止 Confluence. 编辑 <installation-directory>/conf/server.xml 文件(或 ... 
- linux之cp命令(转载)
			Linux中使用cp命令复制文件(夹),本文就日常工作中常用的cp命令整理如下. 一.复制一个源文件到目标文件(夹). 命令格式为:cp 源文件 目标文件(夹) 这个是使用频率最多的命令,负责把一个源 ... 
- 四.awk、sde深度讲解
			###sed### 查询 1创建测试文件 cat>person.txt<<EOF> 101,oldboy,CEO> 102,zhangyao,CTO> 103,Al ... 
- LeetCode(120):三角形最小路径和
			Medium! 题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ... 
- bzoj 1951
			这道题告诉了我们一个很重要的道理:看到题,先想明白再动手! 题意:求对999911659取模的值 首先,由于n的数据范围不是很大(至少不是很大),所以可以O()枚举所有约数分别求组合数 但是有个问题: ... 
- Linux基础一:Linux的安装及相关配置
			1. 计算机操作系统简介 1) 操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. 2) 操作系统的内核的定义:操作系统的内核是一 ... 
- java获取当前时间精确到毫秒
			转载:http://af8991.iteye.com/blog/1217672 import java.text.SimpleDateFormat; import java.util.Date; im ... 
