STL數組第k小數函數

在一個數組中,要找第k小數,很多人的第一反應應該都是sort然後直接輸出。但是昨天就被5e6卡了nlogn,這時候,stl裏的一個函數就可以上場了:nth_element()

這個函數有四個參數:
1.first 容器開始位置
2.nth 要找的第k小(大)元素
3.last 容器結束位置
4.cmp 同sort,默認升序

該函數唯一能保證的就是第k小(大)元素在所選容器區間的第k個位置。不過擁有O(n)O(n)的複雜度。

函數結束之後,在k位置之前的數都小於第k的元素,在k位置之後的數都大於第k的元素。但是不保證有序。

具體使用方式如下:

int main()
{
    int a[20] = {0, 1, 9, 4, 5, 2, 6, 8, 7, 3};
    int k = 2;
    nth_element(a + 1, a + k, a + 10);
    cout << "排序後:" << endl;
    for (int i = 1; i <= 9; i++)
        cout << a[i] << ' ';
    cout << endl;
    cout << a[k] << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章