zoukankan      html  css  js  c++  java
  • Java实现选择问题

    选择问题是求一个n个数列表的第k个最小元素的问题。

    那么如何寻找n个元素中第k个最小元素呢?

    package com.liuzhen.chapter4;
    
    public class SelectProblem {
        //快速选择
        /*
         * 参数A:给定随机数数组
         * 参数k:要求输出的第k个最小元素
         * 函数功能:返回数组A的第k个最小元素的值
         */
        public int quickSelect(int[] A,int k){
            int start = 0;
            int end = A.length-1;
            int mid = new MedianProblem().LomutoPartition(A, start,end);
            while(true){
                if(mid > k-1){
                    end = mid-1;
                    mid = new MedianProblem().LomutoPartition(A, start,end);
                }
                else if(mid < k-1){
                    start = mid+1;
                    mid = new MedianProblem().LomutoPartition(A, start,end);
                }
                else
                    break;
            }
            return A[mid];
        }
        
        public static void main(String[] args){
            SelectProblem test = new SelectProblem();
            int[] A = {4,1,10,8,7,12,9,2,15};
            int result = test.quickSelect(A, 5);
            System.out.println("对数组进行快速选择并执行划分后结果:");
            for(int i = 0;i < A.length;i++)
                System.out.print(A[i]+" ");
            System.out.println("
    "+"进行快速选择后得到数组第5最小元素(从小到大排序):"+result);
        }
    }
    

    运行结果:

    对数组进行快速选择并执行划分后结果:
    2 1 4 7 8 12 9 10 15 
    进行快速选择后得到数组第5最小元素(从小到大排序):8
    
  • 相关阅读:
    BZOJ1176: [Balkan2007]Mokia
    BZOJ1251: 序列终结者
    BZOJ1087: [SCOI2005]互不侵犯King
    Mike and gcd problem CodeForces
    Bank Hacking CodeForces
    Ilya And The Tree CodeForces
    欢迎使用CSDN-markdown编辑器
    Folding UVA
    Cake slicing UVA
    Headmaster's Headache UVA
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948053.html
Copyright © 2011-2022 走看看