给定一个数组,找出数组中第k大的数。其实现代码如下:
package com.threeTop.www; /** * 找出数组中第k大的数 * @author wjgs * */ public class FindK { public static void find(int[]array,int begin,int end,int k) { int i=partition(array,begin,end); if(i+1>k) { //左半部分,递归查找 find(array,begin,i-1,k); } else if(i+1<k) { //右半部分,递归查找 find(array,i+1,end,k); }else { System.out.println("找到了第"+k+"大的数为:"+array[i]); return; } } /** * 每轮快速排序 * @param array * @param begin * @param end * @return */ private static int partition(int[] array, int begin, int end) { if(begin<end) { //第一个数作为基准 int key=array[begin]; while(begin<end) { while(begin<end&&array[end]>key) { end--; } if(begin<end) { array[begin]=array[end]; begin++; } while(begin<end&&array[begin]<key) { begin++; } if(begin<end) { array[end]=array[begin]; end--; } } array[begin]=key; } return begin; } public static void main(String[] args) { int []array={1,5,7,9,2,4,6,8,10,12,11,14,15,13}; FindK.find(array, 0,array.length-1, 8); } }