Java実装:N個の乱順の配列の中でK番目の大きい数を探す

951 ワード

クイックソートと同様に、クイックソートを1回実行した後、K番目の大きな要素が見つかるまで、K番目の要素が配列位置の後ろにある要素が求められるまで、一部だけを選択してクイックソートを続けます.
時間複雑度:O(n)
速い列の思想を利用して、配列arrの中からランダムに1つの要素Xを探し出して、配列を2つの部分arrに分けますaとarr_b.
arr_a中の元素はxより大きいarr_bの要素はxより小さい.
この場合は2つの状況に分けられます.
1.arr_a中の元素がKより小さい場合arr_b中k-arr_a.length個の要素はK番目の大きい数である.
2.arr_aの要素がK以上であればarr_を返すa中K番目の大きい数
Javaコード実装:
public class Quick_find {
	public static int partition(int[] arr,int low,int high){
		int temp=arr[low];
		while(lowlow)
				--high;
			arr[low]=arr[high];
			while(arr[low]>=temp&&lowk-1){
			find_k(k,arr,low,temp-1);			
		}else{
			find_k(k-temp,arr,temp+1,high);
		}
	}
	

	public static void main(String[] args) {
		int[] arr={3,1,2,5,4,7,6};
		find_k(2,arr,0,arr.length-1);
	}

}