学习了快速排序,用例题来加深对快排的理解。
LeetCode215:
给定整数数组nums和整数k,请返回数组中第k个最大的元素。
请注意,你需要找的是数组排序后,第k个最大的元素,而不是第k个不同的元素。
示例1:
输入:[3,2,1,5,6,4], k = 2
输出:5
示例2:
输入:[3,2,3,1,2,4,5,5,6], k = 4
输出:4
思路:
先对数组进行排序,然后去找第k个数
public static int findkLargest(int[] array,int k){
//先排序
quickSort(array,0,array.length - 1);
//再找
return array[array.length - k];
}
/**
* 升序
* @param nums
* @param start
* @param end
*/
public static void quickSort(int[] nums, int start,int end){
if (start > end){
return;
}
int left = start;
int right = end;
int pivot = nums[(start+end)/2];
while (left <= right){
while (left <= right && nums[left] < pivot){
left++;
}
while (left <= right && nums[right] > pivot){
right--;
}
if (left <= right){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
}
quickSort(nums,start,right);
quickSort(nums,left,end);
}