经典算法之堆排序
发布日期:2021-05-06 23:31:24 浏览次数:17 分类:技术文章

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

堆排序

以堆的方式去排序,使最大值位于根节点,之后就缩小尺寸,调整位置。时间复杂度O(n logn),不是很稳定

算法步骤

1.创建一个堆

2.把堆首最大值和堆尾互换位置
3.缩小堆尺寸,调整位置
4.重复…直至堆尺寸为1

直接上代码

private int[] heapSort(int[] source) {
int[] arr = Arrays.copyOf(source, source.length); int len = arr.length; //创建堆 buildMaxHeap(arr, len); for (int i = len - 1; i > 0; i--) {
swap(arr, 0, i); len--; heapify(arr, 0, len); } return arr; }
private void buildMaxHeap(int[] arr, int len) {
for (int i = (int) Math.floor(len / 2); i >= 0; i--) {
heapify(arr, i, len); } }
private void heapify(int[] arr, int i, int len) {
int left = 2 * i + 1; int right = 2 * i + 2; int largest = i; if (left < len && arr[left] > arr[largest]) {
largest = left; } if (right < len && arr[right] > arr[largest]) {
largest = right; } if (largest != i) {
swap(arr, i, largest); heapify(arr, largest, len); } }
上一篇:mysql中没有boolean,而是tinyint
下一篇:.properties文件中,中文成显示Unicode

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月06日 08时20分10秒