寻找第k个最大数
来源:互联网 发布:淘宝客采集工具 编辑:程序博客网 时间:2024/06/05 06:40
寻找第k个最大数,当然可用来求中值。
采用减治方法,将数组分为两个部分,与寻找值位置比较,类似二分法。重点理解当寻找结果在后半段时候,key值保持不变,《算法设计与分析基础》讲是右边数组的q-key个最大数,对于整个数组来书还是最第key个最大数。
import java.util.Scanner;public class FindKMax {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);//int n=scanner.nextInt();//int a[]=new int [n];//for (int i = 0; i < a.length; i++) {//a[i]=scanner.nextInt();//}int n=9;int a[]={4,1,10,9,7,12,8,2,15};//int n=7;//int a[]={4,3,2,1,6,7,5};int key=scanner.nextInt();if (key<=0||key>n) {System.out.println("Wrong input!");return;}findKMax(a, 0, n-1, key-1);}public static void findKMax(int a[], int p, int e, int key) {if (p<=e) {int q=partion(a, p, e);if (key==q){System.out.println(a[q]);}else if (key>q) {findKMax(a, q+1, e, key);//very important understand !}else {findKMax(a, p, q-1, key);}}}public static int partion(int a[], int p, int e)// the last is the compare Value{int x=a[e];int j=p-1;for (int i = p; i < e; i++) {if (a[i]<x) {j++;swap(a, i, j);}}swap(a, e, j+1);return j+1;}public static int partition(int a[], int p, int e)//the first is the compare Value {int x=a[p];int j=e+1;for (int i = e; i >p; i--) {if (a[i]>x) {j--;swap(a, i, j);}}swap(a, p, j-1);return j-1;}public static void swap(int a[], int i, int j) {int t=a[i];a[i]=a[j];a[j]=t;}}
0 0
- 寻找第k个最大数
- 求第K个最大的数
- 寻找数组的第k个最大者
- 总结 -- 寻找最大的K个数,寻找第K大的数
- 【数字之魅】寻找最大的K个数(求第k大的数)
- 找出数组中第K个最大的数
- Top K算法和寻找第K个最小的数
- 寻找最大的第K个数
- 寻找最大的第K个数
- 【算法】寻找K个最大的数组
- 寻找第K大的数
- 寻找第K小的数
- 寻找第K大的数
- 寻找第K小的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K小的数
- 寻找第K大的数
- MATLAB 声音文件分析、处理。
- js书籍
- NSError详解
- .NET Request.Params与Request.QueryString等的区别
- 工作日志2014-08-20
- 寻找第k个最大数
- 消息队列工作机制 msgsnd: Invalid argument
- 人生的道路向前,历经那么多坎坷和尴尬,就算对人生的一种珍惜,也应该尝试着去幸福
- JavaScript-XPath
- seajs加载流程图
- form的onsubmit验证
- io重叠模式
- Cocos2d-x格斗小游戏(二) 晃动的玩家精灵
- windows引用MFC函数注意事项