O n 演算法得到陣列中第k大的數字

2021-10-23 01:34:31 字數 699 閱讀 9802

思路:只要牽扯到排序,那麼複雜度就是o(nlogn)的了。這裡我們借鑑了快速排序的思想,首先任取乙個數字,將小於它的放到左邊,大於它的放到右邊,然後這個數字的位置就可以確定。通過比較k和這個數字的位置,我們就可以判斷應該在這個數字的左邊還是右邊,然後就可以重複上面的操作。最終複雜度是o(n),但是最終陣列的位置會改變。

**如下:

#include

#define ll long long

using

namespace std;

const

int maxx=

1e6+

100;

int a[maxx]

;int n,k;

inline

intdfs

(int l,

int r)

a[l]

=a[i]

; a[i]

=x;return i;}}

inline

intfind

(int len,

int num)

else

}return a[num];}

intmain()

努力加油a啊,(o)/~

查詢陣列中第k大的數字

其實之前寫的6 11 求自定型別元素序列的中位數 是求第k大數字的乙個特例。當時是將某一陣列全部按照由大到小排列後,才取出中位數輸出。然後昨天看資料結構時候才發現可以不完全排序,只拍第0到k個之間的就可以了。實現思想和快排類似 選取乙個任意數,將小於這個數的數字排在該數的右邊,大於這個數的數字排在該...

演算法設計 查詢無序陣列中第K大的數字

給出乙個陣列,要求查詢出這個陣列中按順序排第k大的數字。思路 利用快速排序的思想,把陣列中的元素分治,並計算中間值的位置,如果是k,則這個數就是第k大的數字,如果比k小,那麼再次利用快速排序分治中值以後的資料,如果比k大,則排序前面的數字,直到找到k的位置。下面給出c 實現的 include inc...

陣列中第K小的數字

題目描述 給定兩個整型陣列a和b。我們將a和b中的元素兩兩相加可以得到陣列c。譬如a為 1,2 b為 3,4 那麼由a和b中的元素兩兩相加得到的陣列c為 4,5,5,6 現在給你陣列a和b,求由a和b兩兩相加得到的陣列c中,第k小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...