尋找第K小的數

2021-10-02 02:33:36 字數 756 閱讀 7737

description

輸入n個數,求其中第k小的數。

思路:採用快排求解,**如下

#include

#include

#include

#include

//partition的作用是將小於povit的元素放左邊,大於povit的元素放右邊

intpartition

(int arr,

int left,

int right)

arr[i]

=povit;

//返回劃分點i

return i;

}//對劃分函式作出修改,在還未劃分前,從arr[left~right]中隨機選出乙個基準元素

intrandomizedpartition

(int arr,

int left,

int right)

//用randomizedselect函式找出第k小的數

intrandomizedselect

(int arr,

int left,

int right,

int k)

intmain()

printf

("%d\n"

,randomizedselect

(arr,

0, n-

1, k));

return0;

}

尋找第K小的數

尋找第k小的數屬於順序統計學範疇,通常我們可以直接在o nlgn 的時間內找到第k小的數,使用歸併排序或者堆排序對輸入資料按從小到大進行排序,然後選擇第k個即可。然而,我們還有更好的演算法。首先來看乙個簡單的問題,在乙個有n個元素的集合中,需要多少次比較才能確定其最小值呢?這可以很容易退出需要n 1...

尋找區間內第k小的數

這是最直接暴力的方法,時間複雜度為 o nlog n 直接排序,輸出第k小的值即可 include include using namespace std const int n 1e5 10 int n,k int a n int main 時間複雜度的計算主要關注左右兩個指標的移動,總次數為 n...

尋找第K大的數

題目描述 要求在n個不重複的整數中,找出第k大的整數 其中0輸入第一行為兩個正整數n k 第二行為n個整數,輸入保證這n個整數兩兩相異,每個整數的範圍在 1000000到1000000之間 輸出輸出第k大的整數值 樣例輸入 5 33 2 4 5 1 樣例輸出 3 如下 include include...