当前位置: 首页 > 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));
    }
}

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

相关文章:

  • 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实现身份证文字识别
  • 苏州建站网站模板/关键词工具有哪些
  • 湛江网站建设开发/色盲眼镜
  • 建设交通人才网站/山东百度推广
  • 群晖可以做网站服务器/seo排名快速
  • 地方门户网站运营/seo常用工具包括
  • 竞彩网站开发/如何设计推广方案