【选择排序】堆排序--Java
来源:互联网 发布:淘宝集运香港仓电话 编辑:程序博客网 时间:2024/05/17 20:54
堆排序是一种树形选择排序方法。其特点是:
在排序过程中,将R[1.2.3......n]看成是一棵完全二叉树的顺序储存结构,利用完全二叉树中双亲节点和孩子节点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。
且当父节点的键值总是大于或等于任何一个子节点的键值为最大堆;当父节点的键值总是小于或等于任何一个子节点的键值为最小值。下图是一个最小堆:
例如:设待排序的表有10个记录,其关键字分别为{6,8,7,9,0,1,3,2,4,5}。其堆排序的过程为:
初始堆的建立:
(a~f)步骤:
(g~r)步骤,排序完成:
代码如下(运行成功):
public class HeapSort {public static void main(String[] args){int[] array={3,4,6,7,9,8,1,5,2,0};print(array);Sort(array);System.out.println("排序后的数组:");print(array);}public static void swap(int[] array,int i,int j){if(i!=j){int tmp=array[j];array[j]=array[i];array[i]=tmp;}}public static void Sort(int[] array){for(int i=0;i<array.length;i++){creatMaxHeap(array, array.length-1-i);swap(array, 0, array.length-1-i);print(array);}}public static void creatMaxHeap(int[] array,int lastIndex){for(int i=(lastIndex-1)/2;i>=0;i--){int k=i;while(2*k+1<=lastIndex){int big=2*k+1;if(big<lastIndex){if(array[big]<array[big+1]){big++;}}if(array[k]<array[big]){swap(array, k, big);k=big;}else{break;}}}}public static void print(int[] array){for(int i=0;i<array.length;i++){System.out.print(array[i]+"\t");}System.out.println();}}
堆排序的最坏时间复杂度为O(n*logn)。堆排序的平均性能分析较难,但实际研究表明,它接近于最坏性能。其辅助空间复杂度为O(1)。且是一种不稳定的排序方法。
0 0
- 【选择排序】堆排序--Java
- 选择排序之堆排序Java实现
- 选择排序----堆排序----java实现
- 选择排序--堆排序
- 选择排序:堆排序
- 选择排序-堆排序
- 选择排序-【堆排序】
- 【选择排序】堆排序
- 选择排序 堆排序
- 选择排序-堆排序
- 选择排序---堆排序
- 选择排序&&堆排序
- 选择排序&堆排序
- 排序-->选择排序(选择排序&&堆排序)
- 排序 - [选择排序 - 堆排序]
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 选择排序、树形排序、堆排序的java代码实现
- 数据结构 JAVA描述(十一) 选择排序(直接选择排序,树形选择排序,堆排序)
- 《Java核心技术》复习笔记 - 第五章 继承
- django mysql数据库配置以及管理界面提交中文错误解决
- 写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
- 网络和计应12级电子商务学习
- 《Java核心技术》复习笔记 - 第六章 接口与内部类
- 【选择排序】堆排序--Java
- C语言经典算法100例-021-猴子吃桃问题
- C++ throw()引发的core
- Cookie深度解析
- 《Java核心技术》复习笔记 - 第十三章 集合
- STM32学习心得
- java中TextArea和JTextArea的自动换行和滚动条
- 《Java核心技术》复习笔记 - 第十四章 多线程
- linux下通过ssh登陆失败解决方案