leetcode 215 快速排序

2021-10-09 18:55:39 字數 1133 閱讀 6922

//用快速排序來寫的  這裡一定要明確每個變數的定義,不然很容易出錯

class solution

//在[l,r]之間尋找第k大個元素

private:

int findkthlargest( vector& nums, int l, int r, int k )

//返回p使得 [0,p]都小於/等於nums[0], (p,r] 都大於nums[0]

int partition( vector& nums, int l, int r)

}swap( nums[l], nums[j] ); //最後這一步交換不要忘記了

(雖然用時高的離譜。。。)

注意事項

1快速排序是乙個遞迴的演算法,一定要有乙個遞迴到底的判斷 即上面的if( l > r) return -1;

2快速排序是乙個遞迴的演算法,所以

if( n > minindex )

return findkthlargest(nums, 0, n-1, k);

這裡的return不能忘記,如果不return的話這一步的值就沒法帶回去

並且在partition中,由於是遞迴的演算法,陣列的下標就並不都是從0開始的了,所以在交換的時候,不能用swap( nums[0], nums[ l ] );,要先用 j將原來的第乙個元素l儲存起來,然後用swap( nums[ l ], nums[j] );

3k的值並不隨著遞迴的變化而變化,因為每次只是擷取陣列的一小部分來看,此時陣列的下標沒變,k在新陣列中的下標也是沒有變化的

4一定要明確好變數的定義,這樣寫的時候才不會寫錯!

基於leetcode215題的對於排序演算法的思考

在未排序的陣列中找到第 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 總是有效的,且...

LeetCode 215 陣列中的第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 總是有效的,且 1...

LeetCode 215 陣列中的第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 總是有效的,且 1...