参考博客:
https://blog.csdn.net/beiyetengqing/article/details/8011792
/*基于quicksort实现的原理如下:
1. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小。然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,假设是 k.
2. 如果 k 比 99 大,原数组变成了 array [0, ... k - 1], 然后在数组里找前 100 最大值。 (继续递归)
3. 如果 k 比 99 小, 原数组变成了 array [k + 1, ..., N ], 然后在数组里找前 100 - (k + 1) 最大值。(继续递归)
4. 如果 k == 99, 那么数组的前 100 个值一定是最大的。(退出)*/
import java.util.Random;
public class TopHundred {
public void tophundred(int[] array, int start, int end, int k) {
int switchPointer = start;
int pivot = array[end]; //array最后一个值作为pivot
for (int i = start; i < end; i++) {
if (array[i] >= pivot) {
swap(array, switchPointer, i);
switchPointer++;
}
}
swap(array, end, switchPointer);//交换后,array左边的值比pivot大,右边的值比pivot小
if (switchPointer < k - 1) {