隨機化快排找第k大的值215

2021-10-01 09:41:16 字數 819 閱讀 9358

在未排序的陣列中找到第 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 ≤ 陣列的長度。

3 2 1 5 6 4

隨機3為前驅 3和最右交換

4 2 1 5 6 index=left

找比p=3小的數,與index交換,index加1

2 4 1 5 6

2 1 4 5 6

最後index和right交換

2 1 5 6 4

k=4,所以只有在3的右面找第k大元素

class solution 

public int per(int left,int right,int p)

}swap(index,right);

return index;

}public int sort(int left,int right,int k)

else if(p

else

}public int findkthlargest(int nums, int k)

}

手寫nth element模板(隨機化版快排)

特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的sort大概用到了3種方法以保持其穩定性 特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的sort大概用到了3種方法以保持其穩定性 特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的...

快速排序和隨機化快排學習

0.基本思想 選定基準值 通常為當前陣列的第乙個元素 經過一系列比較和交換,將比基準值小的放在其左邊,將比基準值大的放在其右邊,這稱為是一次迴圈。include using namespace std void qsort int arr,int low,int high 從右向左找比key小的值 ...

隨機化快排 期望執行時間證明

快速排序是比較排序的一種,其最壞執行時間 theta n 2 期望執行時間為 theta nlgn 並且能夠原址排序。實際中的很多排序都由此優化而來。本文主要不對演算法的程式實現進行討論,主要關注其隨機化,及背後的數學證明。在 演算法導論 上,快速排序用 python 表示大致如下 def quic...