zoukankan      html  css  js  c++  java
  • Java实现第九届蓝桥杯快速排序

    快速排序

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

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

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

    package bb;
    import java.util.Random;
    public class JB18_5快速排序 {
        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)// (1)说明到底了
                return a[i];
            if (i - l + 1 < k)
                return quickSelect(a, i + 1, r, k - i + l - 1); // 填空
            // qsort(a, i + 1, right);
            // (3)先试试k,
            // (4)再考虑:k要移动到等于(i - l + 1),试试k-(i - l + 1)
            else
                // i - l + 1 > k
                return quickSelect(a, l, i - 1, k);// (2)qsort(a, left, 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));
            // int [] a = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12, 2};
            // System.out.println(quickSelect(a, 0, a.length-1, 6));
        }
    }
    
  • 相关阅读:
    在centos6.5上搭建elk6.5.3
    mysql 表信息查询
    pychram远程调试
    老程序员的十条告诫
    看清程序员要走的道路
    一个程序员的十年总结
    一个资深程序员成功的背后
    weisheng.cf 网站更新动态
    Endless Night 题解
    2021.1.17高一模拟赛题解
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077560.html
Copyright © 2011-2022 走看看