找出大数组array中第k大的元素(要求时间复杂度O(1))

来源:互联网 发布:淘宝购物省钱方法 编辑:程序博客网 时间:2024/05/20 06:28

具体的代码实现:

import java.util.Stack;/** * @author wuwh  * @date createTime:2016年3月6日 上午12:23:14 */public class KthBiggest {public static int find(int[]array, int k){//定义一个比k大1长度的临时数组    int[]tempArray = new int[k+1];    //把原始数组array的前k个元素拷贝到临时数组tempArray中for (int i = 0; i < k; i++) {tempArray[i] = array[i];}//对tempArray的前k个元素进行快速排序QuickSort.sort(tempArray, 0, k-1);//遍历原始数组array中下标为从k到array.length-1的元素//根据插入排序的思想:若小于tempArray前k个元素的任意值,则插入到合适的位置...for (int i = k; i < array.length; i++) {int j=k-1;for (;j >= 0&&array[i]<tempArray[j]; j--) {tempArray[j+1] = tempArray[j];}tempArray[j+1] = array[i];}return tempArray[k-1];}public static void main(String[] args) {int[]array = {1,9,22,33,123,3,2,5,7,11};int index = 4;System.out.println("数组array中第"+index+"大的元素为::"+find(array,index));}}


0 0
原创粉丝点击