zoukankan      html  css  js  c++  java
  • 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));
        }
    }
    恐惧源于无知,代码改变世界
  • 相关阅读:
    左边菜单导航
    css3实现轮播
    js-统计选项个数
    空间评论。回复。点赞功能
    简单的购物车功能
    字符串常用的几种方法
    React,js实现分页的案列
    python2的cgi程序
    开发环境和工具
    github入门
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/8688387.html
Copyright © 2011-2022 走看看