zoukankan      html  css  js  c++  java
  • 寻找第K大的数(快速排序的应用)

    有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
    给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
    测试样例:
    [1,3,5,2,2],5,3

    http://blog.csdn.net/hymanxq/article/details/51026818

    public class 寻找第K大的数 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] a = { 1, 3, 5, 2, 2 };
    
            System.out.println(findKth(a, a.length, 2));
            /*
             * qsort(a, 0, a.length-1); for(int i:a){ System.out.print(i+" "); }
             */
        }
    
        public static int findKth(int[] a, int n, int K) {
            // write code here
    
            return qs(a, 0, a.length - 1, a.length - K); // 第K大数 的下标
        }
    
        static void qsort(int[] a, int left, int right) {
            if (left < right) {
                int p = partition(a, left, right);
                qsort(a, left, p - 1);
                qsort(a, p + 1, right);
            }
        }
    
        static int qs(int[] a, int left, int right, int k) {
            // if (left < right)
            {
                int p = partition(a, left, right);
                if (p == k) {
                    return a[p];
                } else if (p > k)
                    return qs(a, left, p - 1, k);
                else
                    return qs(a, p + 1, right, k);
            }
        }
    
        static int partition(int[] a, int left, int right) {
            int p = a[left];
    
            while (left < right) {
                while (left < right && a[right] >= p) {
                    right--;
                }
                if (left < right) {
                    a[left++] = a[right];
                }
    
                while (left < right && a[left] <= p) {
                    left++;
                }
                if (left < right) {
                    a[right--] = a[left];
                }
            }
            a[left] = p;
            return left;
        }
    }
  • 相关阅读:
    上拉、下拉无限滚动组件-pc端
    elementui 表格应用1:多选+搜索框+保持选中状态
    uniapp初识笔记3
    uniapp 动态获取接口域名
    uniapp初识笔记2
    uniapp上传图片、视频到oss
    uniapp初识笔记
    vue登录页作为modal全局使用
    vue hash模式下微信分享,实现参数传递
    Vscode以管理员身份运行powershell
  • 原文地址:https://www.cnblogs.com/taek/p/6648012.html
Copyright © 2011-2022 走看看