找出大陣列array中第k大的元素(要求時間複雜度O(n))
阿新 • • 發佈:2019-01-01
具體的程式碼實現:
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)); } }