版权声明:=================== 转载请注明出处======================= https://blog.csdn.net/weixin_40583722/article/details/88855784
问题:
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
假设: k 总是有效的,且 1 ≤ k ≤ 数组的长度。
思路及代码:
/* 思路:Divide and conquer
* 第一步:快速排序(qsort函数);
* 第二步:qsort排好的是从小到大,第k大的元素索引为numsSize-k。
*/
#include<stdio.h>
#include<stdlib.h>
int findKthLargest(int* nums, int numsSize, int k);
int cmp(const void *a, const void *b);
void main(void)
{
int k = 1;
int result;
int nums[6] = {4,2,4,3,6,0};
int numsSize = sizeof(nums) / sizeof(nums[0]);
result = findKthLargest(nums, numsSize, k);
printf("第%d大的数是%d\n",k,result);
system("pause");
}
int findKthLargest(int* nums, int numsSize, int k)
{
qsort(nums, numsSize, sizeof(nums[0]), cmp);
return nums[numsSize-k];
}
int cmp(const void *a, const void *b)
{
return (*(int *)a - *(int *)b);
}