当前位置: 首页 > news >正文

O(n)复杂度实现寻找数组第k小的数(快速选择算法)

非堆排序实现,利用快速排序思想实现的快速选择

package algorithm;

public class Test {

    public int quickSelect(int nums[], int left, int right, int k){
        if (left == right) return nums[left];
        int i = left - 1, j = right + 1, x = nums[left];
        while (i < j){
            do i++; while (nums[i] < x);
            do j--; while (nums[j] > x);
            if (i < j){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
            }
        }
        int lenL = j - left + 1;
        if (lenL >= k) return quickSelect(nums, left, j, k);
        else return quickSelect(nums, j + 1, right, k - lenL);
    }

    public static void main(String[] args) {
        int[] nums = new int[]{0, 1, 0, 3, 12};
        Test test = new Test();
        System.out.println(test.quickSelect(nums, 0, nums.length -  1, 3));
    }
}

图示:
在这里插入图片描述

http://www.dtcms.com/a/125249.html

相关文章:

  • spring--整合Mybatis详解
  • 支持多格式且免费的图片转换工具推荐
  • 【Java实战】——手撕斐波那契数列
  • 成都国际数字影像产业园:以产业生态优势,驱动影像业务腾飞
  • PM2 完全指南:Node.js 应用后台启动、关闭与重启详解
  • ONVIF/RTSP/RTMP协议EasyCVR视频汇聚平台RTMP协议配置全攻略 | 直播推流实战教程
  • 蓝桥杯赛前题
  • VectorBT量化入门系列:第五章 VectorBT性能评估与分析
  • zerotier安装在旁路由实现异地局域网互访的设置方法
  • P8754 [蓝桥杯 2021 省 AB2] 完全平方数
  • 蓝桥杯比赛 python程序设计——封闭图形个数
  • 使用Lombok的@Slf4j和idea构建:找不到log符号-解决
  • ARP代理
  • 微硕WINSOK高性能MOS管WSD30L40DN33在PD快充中的应用
  • JVM 之 String 引用机制解析:常量池、堆内存与 intern 方法
  • Windows 下搭建 Git 本地服务器并进行开发
  • Dify问题记录 (一)
  • 计算机视觉图像特征提取入门:Harris角点与SIFT算法
  • ctfshow WEB web9
  • 调用阿里云API实现身份证文字识别
  • 基于3d相机的点云物体检测与路径规划
  • Node.js 开发的简单 Web 服务器代码
  • 10分钟做了一个投资回报计算器,欢迎大家使用
  • 第二届数字图像处理与计算机应用国际学术会议(DIPCA 2025)
  • 城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花
  • 修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
  • Go学习系列文章声明
  • 《AI大模型应知应会100篇》第9篇:大模型的推理能力:原理与实现
  • 排序算法详细介绍对比及备考建议
  • 数据仓库元数据的管理