• 求数列中第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

  • 相关阅读:
    webbrowser在vb中叫
    linux小记之安装bin或deb程序
    9011,9012,9013,9014,8050,8550三极管的区别
    中兴v880刷机全过程。原创亲测
    Slackware的启动(init)过程
    sysvinit
    rc.S 分析【转自CSDN 】
    linux 解压rar zip
    slackware启动脚本详解
    工作
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9747667.html
Copyright © 2020-2023  润新知