快速排序算法以及快速选择算法的Java实现
2023-12-16 04:37:39
?模板题:
215. 数组中的第K个最大元素 - 力扣(LeetCode)
原代码?
public class test {
/**
* 快速排序
* @param left 左边界
* @param right 右边界
* @param nums 待排序数组
*/
public static void selectquick(int left, int right, int[] nums) {
if (left > right) return;
int temp = nums[left];
int i = left, j = right;
while (i < j) {
while (i < j && nums[j] >= temp) {
j -= 1;
}
while (i < j && nums[i] <= temp) {
i += 1;
}
if (i < j) {
int t = nums[j];
nums[j] = nums[i];
nums[i] = t;
}
}
nums[left] = nums[i];
nums[i] = temp;
selectquick(left, i - 1, nums);
selectquick(i + 1, right, nums);
}
/**
* 查找第k大的数字
* @param k 第k大
* @param left 左边界
* @param right 右边界
* @param nums 待查找数组
* @return 第k大的数字
*/
public static int selectquickK(int k, int left, int right, int[] nums) {
int temp = nums[left];
int i = left, j = right;
while (i < j) {
while (i < j && nums[j] >= temp) j--;
while (i < j && nums[i] <= temp) i++;
if (i < j) {
int t = nums[j];
nums[j] = nums[i];
nums[i] = t;
}
}
nums[left] = nums[i];
nums[i] = temp;
if (i < k) {
return selectquickK(k, i + 1, right, nums);
} else if (i > k) {
return selectquickK(k, left, i, nums);
} else {
return nums[i];
}
}
public static void main(String[] args) {
int[] arr = new int[] {3,2,1,4};
// 整体快排
// selectquick(0,arr.length-1,arr);
// 选择第k大的数字
// int k = 1;
// System.out.println(selectquickK(arr.length-k,0, arr.length-1, arr));
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
文章来源:https://blog.csdn.net/qq_51118755/article/details/134939519
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!