利用快排寻找数组中第k个最大元素
程序员文章站
2024-03-25 14:52:52
...
/*
* 利用快排寻找数组中第k个最大元素
*/
public class FindFirstKElement {
//快排
public static int getBaseIndex(int[] arr, int start, int end) {
int base = arr[start];
while(start < end) {
while(arr[end] > base && end > start) {
end --;
}
if(end <= start) {
break;
}
else {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
while(arr[start] < base && start < end) {
start ++;
}
if(start >= end) {
break;
}
else {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
return start;
}
public static void findFirstKElement(int[] arr, int k, int start, int end) {
int middle = getBaseIndex(arr, start, end);
if(middle == k - 1) {
System.out.println(arr[middle]);
}
else if(middle < k - 1) { //middle右边找
findFirstKElement(arr, k, middle + 1, end);
}
else { //middle左边找
findFirstKElement(arr, k, start, middle - 1);
}
}
public static void main(String[] args) {
int[] arr = {23,4,6,8,232};
int k = 2;
int start = 0;
int end = arr.length - 1;
findFirstKElement(arr, k, start, end);
}
}
上一篇: 重构笔记 博客分类: 读书笔记 生活
推荐阅读
-
利用快排寻找数组中第k个最大元素
-
[Leedcode][第215题][JAVA][数组中的第K个最大元素][快排][优先队列]
-
【LeetCode215】数组中的第K个最大元素【快排 堆排】
-
215. 数组中的第K个最大元素 快排思想+小根堆
-
快排,归并排序,利用快排解决数组中的第K个最大元素
-
[排序 手写堆 快排模板] 215. 数组中的第K个最大元素(堆排序、快速排序 + 分治)
-
python数组中的第K个最大元素(快排与堆排)
-
【LeeCode 中等 堆 python3】 215. 数组中的第K个最大元素
-
python数组中的第K个最大元素(快排与堆排)
-
【LeeCode 中等 堆 python3】 215. 数组中的第K个最大元素