import java.util.*;
public class Finder {
public int findKth(int[] a, int n, int K) {
int low = 0;
quickSort(a,low,n-1);
return a[n-K]; //返回倒数第3个数(因为我是升序排序)
}
private static void quickSort(int[] a, int low, int high) {
// 递归出口
if (low > high) {
return;
}
//标记
int i = low;
int j = high;
int key = a[low];
// 完成一趟快排
while (i < j) {
// 1.从右往左找到第一个小于key的数
while (i < j && a[j] >key) {
j--;
}
// 2. 从左往右找到第一个大于key的数
//(刚开始少了等于,发现run了好久都没run出来,可能陷入了死循环)
while (i < j && a[i] <= key) {
i++;
}
// 3. 交换
//if (i < j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
//}
}
// 4.调整key的位置 (将key放到i的位置)
a[low] = a[i];
a[i] = key;
// 递归过程
// 5. 对key左边的数快排
quickSort(a, low, i - 1);
// 6. 对key右边的数快排
quickSort(a, i + 1, high);
}
}
找出数组中第K大的数(快排)
最新推荐文章于 2021-08-29 11:31:22 发布