题目
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
:::
代码
class Solution {
public int findKthLargest(int[] nums, int k) {
int length = nums.length; //获取数组长度
bubbleSort(nums); //对数组做升序排序
return nums[length - k];
}
//冒泡排序
public static void bubbleSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
int tmp = 0;
if (arr[j] > arr[j+1]){
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
}
//优化冒泡排序
public static void optimalBubbleSort(int[] arr){
int lastExchangeIndex = 0; //记录最后一次交换的位置
int sortBorder = arr.length - 1; //无序数列的边界
for (int i = 0; i < arr.length - 1; i++) {
boolean isSorted = true; //有序标记,当一轮循环元素无交换时为true
for (int j = 0; j < sortBorder; j++) {
int tmp = 0;
if (arr[j] > arr[j+1]){
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
isSorted = false; //元素位置发生改变
lastExchangeIndex = j; //记录最后一次交换的位置
}
}
sortBorder = lastExchangeIndex;
if (isSorted)break; //当元素位置不发生变化时,说明此时已经有序
}
}
}