首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
java面试题基础
冒泡排序算法
插入排序算法
归并排序算法
二叉树排序算法
基数排序
选择排序
堆排序
快排
TCP-三次握手
HTTP协议
WebSocket
Mysql架构
Innodb与Myisam数据库引擎
事务隔离级别
面向对象(OOP)
异常
泛型
Object
StringBuilder
代理
注解
java面试题基础二
HashMap
ConcurrentHashMap
BlockingQueue
线程
Volatile
AtomicInteger
Synchronized
Java虚拟机架构
类加载器
内存模型
垃圾回收
Mybatis面试题
IOC
高并发系统设计
分布式缓存
分布式锁
分布式事务
消息队列
当前位置:
首页>>
技术小册>>
Java面试指南
小册名称:Java面试指南
堆排序算法是一种高效的排序算法,它基于二叉堆数据结构实现。以下是使用Java编写堆排序算法的步骤: 将无序数组构建成二叉堆结构,使用最大堆(Max Heap)或最小堆(Min Heap)。 交换堆顶元素和最后一个元素,然后将新的堆顶元素下沉(Max Heap)或上浮(Min Heap),以维持堆结构。 重复步骤2,直到堆中所有元素都排好序。 以下是一个Java实现的示例代码: ```java public class HeapSort { public static void sort(int arr[]) { int n = arr.length; // 构建最大堆 for (int i = n / 2 - 1; i >= 0; i--) { heapify(arr, n, i); } // 一个个从堆中取出元素 for (int i = n - 1; i > 0; i--) { // 将堆顶元素与当前未排序的最后一个元素交换 int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; // 重新构建最大堆 heapify(arr, i, 0); } } private static void heapify(int arr[], int n, int i) { int largest = i; int left = 2 * i + 1; int right = 2 * i + 2; // 如果左子树比根节点大,则更新最大值索引 if (left < n && arr[left] > arr[largest]) { largest = left; } // 如果右子树比根节点大,则更新最大值索引 if (right < n && arr[right] > arr[largest]) { largest = right; } // 如果最大值不是根节点,则交换根节点和最大值 if (largest != i) { int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; // 递归地堆化子树 heapify(arr, n, largest); } } public static void main(String args[]) { int arr[] = { 12, 11, 13, 5, 6, 7 }; HeapSort.sort(arr); System.out.println("排序后的数组:"); for (int i = 0; i < arr.length; ++i) { System.out.print(arr[i] + " "); } } } ``` 以上代码中,sort()方法使用最大堆实现堆排序,heapify()方法用于堆化子树,main()方法用于测试排序结果。
上一篇:
选择排序
下一篇:
快排
该分类下的相关小册推荐:
Java语言基础16-JDK8 新特性
Java并发编程实战
Java语言基础13-类的加载和反射
Java语言基础7-Java中的异常
Java语言基础15-单元测试和日志技术
手把手带你学习SpringBoot-零基础到实战
Java高并发秒杀入门与实战
Java语言基础4-数组详解
Mybatis合辑3-Mybatis动态SQL
Java语言基础5-面向对象初级
深入拆解 Java 虚拟机
Java语言基础3-流程控制