zoukankan      html  css  js  c++  java
  • 求数列中第K大的数

    原创


    利用到快速排序的思想,快速排序思想:https://www.cnblogs.com/chiweiming/p/9188984.html

    array代表存放数列的数组,K代表第K大的数,mid代表一趟快速排序后返回的基准记录下标;

    一趟快速排序下来若基准记录存在的位置满足:array.length-mid==K,则说明array[mid]即是第

    K大的数,若小于K,说明第K大的数在区间 [ left , mid-1 ],大于K说明在区间 [ mid+1,right ];

    import java.util.*;
    
    public class 算法分析与设计2_3_选做 {
        
        static int array[];
        static int K;
        static int mid;
        
        static int yiSort(int left,int right) {    //一趟快速排序
            int x=array[left];    //存储基准记录
            while(left<right) {
                while(left<right && array[right]>=x) {
                    right--;
                }
                if(left<right) {
                    array[left]=array[right];
                    left++;
                }
                while(left<right && array[left]<x) {
                    left++;
                }
                if(left<right) {
                    array[right]=array[left];
                    right--;
                }
            }
            array[left]=x;//基准记录归位
            return left;
        }
        
        static void fun(int left,int right) {
            mid=yiSort(left,right);
            if(array.length-mid==K) {
                return;
            }
            if(array.length-mid<K) {
                fun(left,mid-1);
            }else {
                fun(mid+1,right);
            }
        }
        
        public static void main(String[] args) {
            Scanner reader=new Scanner(System.in);
            System.out.print("求数组中第K大的数:");
            K=reader.nextInt();
            System.out.print("输入数组大小(数组大小>=K):");
            int n=reader.nextInt();
            array=new int[n];
            System.out.print("输入数组元素:");
            for(int i=0;i<n;i++) {
                array[i]=reader.nextInt();
            }
            fun(0,n-1);
            System.out.println(array[mid]);
        }
    
    }

    16:31:24

    2018-10-06

  • 相关阅读:
    Compiere中的树
    Compiere 模型构建
    LSMW魔鬼教程
    Compiere 因翻译工作没有完成,所以现在系统中的所有帮助去掉
    插入、更新扩展字段
    SAPscript Forms 教程
    SAP ABAP 效率测试
    批量更新数据表
    月份的描述表T247
    SAP 程序下载工具
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9747667.html
Copyright © 2011-2022 走看看