C (2) 第k大元素

2021-10-07 16:28:10 字數 908 閱讀 7395

求出已知n個正整數中的第k大元素。(1<=k<=n)

6

3 4 2 1 5 7

6

對於正整數序列 a [ n ],我們可以設定兩層 for 迴圈:

第一層用 n-i 標記第 i 大元素的下標(i 從1至k),第二層用 j 標記需要(與下乙個元素)比較的元素的下標(0 ~ i -1)。通過內層迴圈,當前的最大元素被儲存在 a [ i ] 中;通過外層迴圈,我們可以依次得到第 i 大元素 a [ n-i ] 。

該方法基於氣泡排序實現,明顯看到,此方法時間複雜度為o(n2)。但由於外層迴圈次數由 n 減少到了 k,相當於只獲得了排序後的後 k 位元素,相比於先排序後取值來說,一定程度上減少了執行時間。

#include 

using namespace std;

int main()

; int n;

int k;

cout<<

"元素總個數:"

; cin>>n;

cout<<

"各元素分別為:"

;for

(int i=

0;i) cout<<

"k為:"

; cin>>k;

for(int i=n-

1;i>=n-k;i--

)// i記錄第1大至第k大元素的下標}}

cout<<

"第k大元素為:"

冫中!

第k大元素

在陣列中找到第k大的元素 最先想到的是簡單排序,但是簡單排序超時,於是想到改造快排,快排的思想是每次確定乙個元素在陣列中的下標,如果確定的下標為k那該元素為k大,若下標大於k,第k大在改下標之前.class solution public int pat int nums,int start,int...

第K大元素

在陣列中找到第k大的元素。給出陣列 9,3,2,4,8 第三大的元素是4 給出陣列 1,2,3,4,5 第一大的元素是5,第二大的元素是4,第三大的元素是3,以此類推 要求時間複雜度為o n 空間複雜度為o 1 如果不考慮時間複雜度和空間複雜度,這道題目有很多種方法,利用一種排序演算法將陣列倒敘排序...

5 第k大元素

2017.9.14 昨天做了一整天的題。首先使用了氣泡排序,我知道會超時。但還是做了一遍,心想複習一下舊的知識也是極好的。於是,果然超時了。但是毫不氣餒。想,要不用快速排序試一試。但是自作聰明的以為這題一定是在考堆排序。然而堆排序是我最不會的排序方式,但還是下定決心開始學習。好不容易學會了之後,果然...