数据结构与算法(11)---Java语言实现:堆排序
来源:互联网 发布:plsql输入ip连接数据 编辑:程序博客网 时间:2024/06/05 12:39
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成,它们均是通过调用Heapify实现的。
平均性能
O(N*logN)。
其他性能
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1).
它是不稳定的排序方法。(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话,排序前 和排序后他们的相对位置不发生变化)
Java实现代码:
package 算法;public class Demo7 {//堆排序主方法public static void heapSort(int[] arry){arry=buildHeap(arry);//构建大顶堆for(int i=arry.length-1;i>0;i--){int temp=arry[0];arry[0]=arry[i];arry[i]=temp;//将堆顶存到最后,最后一个元素存到堆顶adjustHeap(arry,0,i);//确定最后一个元素最大之后继续调整前面元素}}public static int[] buildHeap(int[] arr){for(int j=(arr.length-2)/2;j>=0;j--){//构造大顶堆adjustHeap(arr, j,arr.length );}return arr;}public static void adjustHeap(int[] arr,int star,int len){//调整堆int temp=arr[star];for(int i=star*2+1;i<len-1;i=i*2+1){if(i<len && arr[i]<arr[i+1]){i++;}if(temp>=arr[i]){break;}arr[star]=arr[i];star=i;}arr[star]=temp;} public static void main(String[] args){//测试方法int arr[]={7,4,8,3,5,2,1,6,10,27,12,23};heapSort(arr);for(int i=0;i<arr.length;i++){//逐项输出System.out.print(arr[i]+" ");}}}
输出结果:
1 2 3 4 5 6 7 8 10 12 23 27
阅读全文
0 0
- 数据结构与算法(11)---Java语言实现:堆排序
- 数据结构与算法(5)---Java语言实现:选择排序
- 数据结构与算法(6)---Java语言实现:冒泡排序
- 数据结构与算法(7)---Java语言实现:快速排序
- 数据结构与算法(8)---Java语言实现:插入排序
- 数据结构与算法(9)---Java语言实现:希尔排序
- 数据结构与算法(10)---Java语言实现:归并排序
- 数据结构与算法分析(Java语言描述)(13)—— 原地堆排序
- 数据结构与算法分析(Java语言描述)(12)—— 堆排序与数组建堆
- 【数据结构与算法】【排序】堆排序的代码实现
- java数据结构排序之堆排序算法实现
- 数据结构与算法:堆与堆排序
- 数据结构与算法-堆与堆排序
- 【数据结构与算法】堆排序
- 堆排序 | 数据结构与算法
- 【数据结构与算法】堆排序
- java数据结构与算法-高级排序-堆排序
- 堆排序算法(c 语言实现)
- BZOJ1051(洛谷P2341) [HAOI2006]受欢迎的牛
- 大整数的因子
- 软考经验
- 无人机驾驶员培训学习记录(四)
- IMAP和POP的区别
- 数据结构与算法(11)---Java语言实现:堆排序
- IOS-GCD多线程
- 对c语言陷阱与缺陷中函数声明理解
- 3. 装饰者模式
- QSS黑色皮肤
- SpringBoot热部署之devtools案例(学习笔记)
- 自定义控件按钮练习
- RabbitMQ+Spring Quartz 实现消息的定时发送和接收
- Nuclear Throne 中文版制作教程及汉化demo版发布