吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 679|回复: 8
收起左侧

[学习记录] 堆排序算法分享

[复制链接]
angren 发表于 2023-5-9 19:02
今天写代码过程中用到了一种算法,在很多数字中找出最大的一个,我首先想到了堆排序的算法,也就直接写了一个,顺便分享给大家。

[Java] 纯文本查看 复制代码
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 l = 2 * i + 1;
        int r = 2 * i + 2;
        if (l < n && arr[l] < arr[largest]) {
            largest = l;
        }
        if (r < n && arr[r] < arr[largest]) {
            largest = r;
        }
        if (largest != i) {
            int swap = arr[i];
            arr[i] = arr[largest];
            arr[largest] = swap;
            heapify(arr, n, largest);
        }
    }

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lover1989 发表于 2023-5-9 20:43
堆排序算法不错,可以可以
Klock0828 发表于 2023-5-9 21:24
px307 发表于 2023-5-10 07:34
楼主是做什么研究的,我写了多年代码,还未用过算法
漠上花开 发表于 2023-5-10 11:40
感谢分享,楼主厉害的
 楼主| angren 发表于 2023-5-12 17:40
px307 发表于 2023-5-10 07:34
楼主是做什么研究的,我写了多年代码,还未用过算法

java,多年代码不用算法也是很厉害了。我们这隔段时间就会有需求了。
px307 发表于 2023-5-12 17:46
angren 发表于 2023-5-12 17:40
java,多年代码不用算法也是很厉害了。我们这隔段时间就会有需求了。

大佬,你们是做哪方面的,哪个行业,数据分析吗
波妞阿姨 发表于 2023-6-20 16:23
大佬 怎么能联系到您呢  咨询个wetool您之前发的那个软件的问题 那个帖子关了 回复不了。
nob 发表于 2023-6-20 19:47
堆排序还是很巧妙的,在最坏情形的复杂度也与理论复杂度O(n*log(n))同级。
不过如果只是要找到最大的一个,并不需要将全体排序,只需要n-1次比较就够了吧?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表