• 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));
        }
    }
    
  • 相关阅读:
    CSS3圆角详解
    纯CSS绘制三角形(各种角度)
    jquery实现文字上下无缝滚动
    选择select里面某个option触发的事件
    倒计时
    移动端弹出层加遮罩后禁止滑动
    终端连接oschina 生成SSH公钥
    兼容所有的浏览器透明度代码
    背景颜色渐变效果设置
    Linux下搜索文件命令whereis/which/find/locate
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077668.html
Copyright © 2020-2023  润新知