分治算法对于给定的n个元素的数组a[1..n],要求从中找出第k小的元素,用java语言解答。
时间: 2023-05-26 22:05:08 浏览: 109
以下是使用分治算法在Java中查找第k小元素的实现:
```
public class FindKthSmallest {
public static int findKthSmallest(int[] arr, int left, int right, int k) {
if (k > 0 && k <= right - left + 1) {
int pos = partition(arr, left, right);
if (pos - left == k - 1)
return arr[pos];
if (pos - left > k - 1)
return findKthSmallest(arr, left, pos - 1, k);
return findKthSmallest(arr, pos + 1, right, k - pos + left - 1);
}
return -1;
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left;
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
i++;
}
}
int temp = arr[right];
arr[right] = arr[i];
arr[i] = temp;
return i;
}
public static void main(String[] args) {
int[] arr = { 3, 1, 4, 6, 7, 2 };
int k = 3;
int left = 0;
int right = arr.length - 1;
int result = findKthSmallest(arr, left, right, k);
System.out.println("The " + k + "th smallest element is: " + result);
}
}
```
在主函数中,我们创建一个包含6个元素的整数数组,然后调用`findKthSmallest`函数来查找第3小的元素。该函数使用递归的方式来拆分数组并逐步缩小搜索范围,直到找到第k小的元素。
在`partition`函数中,我们采用快速排序的方法来将数组分为两个部分,并返回分割位置。
运行上述代码将输出以下结果:
```
The 3th smallest element is: 3
```
因此,第3小的元素是3。
阅读全文