【20190327】【每天一道算法题】数组中的第K个最大元素(分治算法)

版权声明:=================== 转载请注明出处======================= 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);
}

猜你喜欢

转载自blog.csdn.net/weixin_40583722/article/details/88855784