Table of Contents
1. 题目描述:
2. 解题思路:
3. 知识点总结:
在未排序的数组中找到第 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 总是有效的,且 1 ≤ k ≤ 数组的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
最开始比较笨的解题思路, 冒泡排序+数组定位:
int findKthLargest(int* nums, int numsSize, int k){
int i, j, temp;
for (i = 0; i
考虑用快速排序优化后的解题思路及代码:
int compare_data(const void *a, const void *b){
return *(int *)b - *(int *)a;
}
int findKthLargest(int* nums, int numsSize, int k){
qsort(nums, numsSize, sizeof(int), compare_data);
return nums[k-1];
}
以上是用快排的库函数实现的, 后续需要自己实现快排算法.
reference: https://www.cnblogs.com/laizhenghong2012/p/8442270.html
核心: 快速排序 qsort接口函数:
qsort()
函数原型
void qsort(
void *base,
size_t nmemb,
size_t size,
int (*compar)(const void *, const void *)
);
函数功能:qsort()函数的功能是对数组进行排序,数组有nmemb个元素,每个元素大小为size。
参数base - base指向数组的起始地址,通常该位置传入的是一个数组名
参数nmemb - nmemb表示该数组的元素个数
参数size - size表示该数组中每个元素的大小(字节数)
参数(*compar)(const void *, const void *) - 此为指向比较函数的函数指针,决定了排序的顺序。
比较函数的接口实现, 这个可以背下, 改变a-b的顺序, 可以改变排序的大小顺序.
int compare_data(const void *a, const void *b){
return *(int *)b - *(int *)a;
}
后续: 研究快排原理, 并用代码实现.