c++ nth_element()函数
一、作用
查找第n小的元素
二、用法
nth_element(起始地址,查找元素的下標,最后一個元素地址+1);
nth_element(起始地址,查找元素的下標,最后一個元素地址+1,自定義排序);
舉例:
查找數組中第6小的元素
那么能不能查找第n大的元素呢?
當然可以的,將第n大的問題轉換為求第m小的問題就可以了
例如一個數組有10個元素,求第2大的數,那么它等同于求第10-2+1=9小的元素
自定義排序:
假如遇到無法直接比較大小的結構體怎么辦呢?重載運算符是一種辦法,也可以自定義排序,例:
函數的實現
與快速排序思路大致相同,例如一個數組有10個元素:4,3,9,1,8,6,5,10,2,7;
找第7小的元素:
第一步:開找第一個數,4,比4小的放在4左邊,比4大的放在4右邊
結果:3,1,2,4,9,8,6,5,10,7
結論:那么4是第4小的數,因為有3個比它小的元素在左邊
第二步:第7小的元素肯定在4的右邊,找4右邊的第一個數,9,比9小的放在9左邊,比9大的放在9右邊
結果:3,1,2,4,8,6,5,7,9,10
結論:那么9是第9小的數,因為有8個比它小的元素在左邊
第三步:第7小的元素肯定在9的右邊,找9左邊的第一個數,7,比7小的放在7左邊,比7大的放在7右邊
結果:3,1,2,4,6,5,7,8,9,10
結論:那么7是第7小的數,因為有6個比它小的元素在左邊
得到第7小的數7,結束
時間復雜度平均為O(n),最差為O(n^2);
它把不必要的排序步驟省略掉了,復雜度大大降低
總結
以上是生活随笔為你收集整理的c++ nth_element()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java数据同步方案
- 下一篇: C++内存分布探讨,x86和x64位的细