• 2018年蓝桥杯java b组第五题


    标题:快速排序

    以下代码可以从数组a[]中找出第k小的元素。


    它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。


    请仔细阅读分析源码,填写划线部分缺失的内容。

    我在使用(a, l, r, k - 1)时候,有时可以过编译,有时不行,当时时间比较紧,也就没有接着想,留坑

    import java.util.Random;
    
    public class Main {
        public static int quickSelect(int a[], int l, int r, int k) {
            Random rand = new Random();
            int p = rand.nextInt(r - l + 1) + l;
            int x = a[p];
            int tmp = a[p];
            a[p] = a[r];
            a[r] = tmp;
            int i = l, j = r;
            while (i < j) {
                while (i < j && a[i] < x)
                    i++;
                if (i < j) {
                    a[j] = a[i];
                    j--;
                }
                while (i < j && a[j] > x)
                    j--;
                if (i < j) {
                    a[i] = a[j];
                    i++;
                }
            }
            a[i] = x;
            p = i;
            if (i - l + 1 == k)
                return a[i];
            if (i - l + 1 < k)
                return quickSelect(a, l, r, k - 1); // 填空
            else
                return quickSelect(a, l, i - 1, k);
        }
    
        public static void main(String args[]) {
            int[] a = {1, 4, 2, 8, 5, 7};
            System.out.println(quickSelect(a, 0, 5, 4));
        }
    }
    恐惧源于无知,代码改变世界
  • 相关阅读:
    Java知识回顾 (8) 集合
    Java知识回顾 (7) 继承、多态与接口、封装
    使用LEANGOO泳道
    使用列表
    LEANGOO用户设置
    创建LEANGOO项目
    为看板添加成员
    创建看板卡片
    创建LEANGOO看板
    创建LEANGOO账号
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/8688387.html
Copyright © 2020-2023  润新知