其實之前寫的6-11 求自定型別元素序列的中位數 是求第k大數字的乙個特例。當時是將某一陣列全部按照由大到小排列後,才取出中位數輸出。然後昨天看資料結構時候才發現可以不完全排序,只拍第0到k個之間的就可以了。實現思想和快排類似:選取乙個任意數,將小於這個數的數字排在該數的右邊,大於這個數的數字排在該數的左邊,比較此時k與這個數所在的位置i的大小,如果i>k,那麼去繼續排左邊的數字,如果i
#include #include int findkthlargest(int list, int len, int kth);
int solvekth(int list, int left, int right, int k);
void showarray(int a, int len);
int main()
if((i+1)
O n 演算法得到陣列中第k大的數字
思路 只要牽扯到排序,那麼複雜度就是o nlogn 的了。這裡我們借鑑了快速排序的思想,首先任取乙個數字,將小於它的放到左邊,大於它的放到右邊,然後這個數字的位置就可以確定。通過比較k和這個數字的位置,我們就可以判斷應該在這個數字的左邊還是右邊,然後就可以重複上面的操作。最終複雜度是o n 但是最終...
演算法設計 查詢無序陣列中第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小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...