在一個數組中,要找第k小數,很多人的第一反應應該都是sort然後直接輸出。但是昨天就被5e6
卡了nlogn
,這時候,stl裏的一個函數就可以上場了:nth_element()
這個函數有四個參數:
1.first 容器開始位置
2.nth 要找的第k小(大)元素
3.last 容器結束位置
4.cmp 同sort,默認升序
該函數唯一能保證的就是第k小(大)元素在所選容器區間的第k個位置。不過擁有的複雜度。
函數結束之後,在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;
}