import java.util.*;
public class Solution {
Random r = new Random();
public static void swap(int arr[], int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public int findKth(int[] a, int n, int K) {
// write code here
return partition(a, 0, n-1, K);
}
public int partition(int[] a, int low, int high, int k){
int x = Math.abs(r.nextInt()) % (high - low + 1) + low;
swap(a, low, x);
int v = a[low];
int i = low + 1;
int j = high;
while(true){
while(j > low + 1 && a[j] < v)
j--;
while(i <= high && a[i] > v)
i++;
if(i > j)
break;
swap(a, i, j);
i++;
j--;
}
swap(a, low, j);
if(j + 1 == k)
return a[j];
else if(j + 1 < k)
return partition(a, j + 1, high, k);
else
return partition(a, low, j - 1, k);
}
}
牛客-TOP101-BM47
最新推荐文章于 2024-10-02 23:40:03 发布
该博客介绍了如何使用Java实现快速选择算法,通过引入随机数生成器优化了选取枢轴元素的过程。代码中定义了一个名为`Solution`的类,包含`swap`交换元素的方法以及`findKth`寻找第K小元素的函数。`findKth`方法内部调用了`partition`进行划分,并根据枢轴位置决定递归方向。整个过程展示了在数据结构和算法中的随机化技巧。
摘要由CSDN通过智能技术生成