题目
思路
利用快速排序,归并排序等时间复杂度为 n(nlogN)的排序算法,
本答案利用快速排序
参考答案
import java.util.*;
public class Solution {
public int findKth (int[] a, int n, int K) {
quickSort(a, 0, n - 1);
return a[n-K];
}
public static void quickSort(int[] arr, int L, int R) {
if (L > R) return;
int partion = partion(arr, L, R);
quickSort(arr, L, partion - 1);
quickSort(arr, partion + 1, R);
}
public static int partion(int[] arr, int L, int R) {
int base = arr[R];
int left = L, right = R - 1;
while (left <= right) {
while (left <= right && base <= arr[right]) right--;
while (left <= right && base > arr[left]) left++;
if (left <= right) swap(arr, left, right);
}
swap(arr, left, R);
return left;
}
public static void swap(int[] arr, int L, int R) {
int tmp = arr[L];
arr[L] = arr[R];
arr[R] = tmp;
}
}