Table of Contents
1. 題目描述:
在未排序的數組中找到第 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
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
2. 解題思路:
最開始比較笨的解題思路, 冒泡排序+數組定位:
int findKthLargest(int* nums, int numsSize, int k){
int i, j, temp;
for (i = 0; i<k; i++){
for(j=i+1; j<numsSize; j++){
if (nums[i] < nums[j]){
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
return nums[k-1];
}
考慮用快速排序優化後的解題思路及代碼:
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];
}
以上是用快排的庫函數實現的, 後續需要自己實現快排算法.
3. 知識點總結:
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;
}
後續: 研究快排原理, 並用代碼實現.