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...