在c++的stl庫中,提供了nth_element這樣乙個函式,標頭檔案algorithm
它的用法是nth_element(a+l,a+k,a+r)
這樣它會使a這個陣列中區間(l,r)內的第k大的元素處在第k個位置上(相對位置)
將第k_th 元素放到它該放的位置上,左邊元素都小於它,右邊元素都大於它.
但是它並不保證其他元素有序!這個函式的期望複雜度是o(n)的 !
原理如下:
在當前區間[l,r]上,找乙個基準位置mid
通過線性的掃瞄交換,
使得[l,mid)的元素都比mid小,(mid,r]的元素都比mid大
此時mid上的元素就是第mid小的
然後判斷k在哪半邊,繼續遞迴處理
所以這樣就達到了期望的o(n)複雜度
STL 類模板
1.模板 模板裡面也可以有非型別的引數,原則上只能是整數,而且是字面量 字面量在編譯時就確定下來。也可以有預設值 template stacks 一般的型別使用模板就可以搞定,特殊的型別就使用特化 想檢視實際替換時是什麼型別,這就需要執行時型別識別函式了typeid 最好不要把模板的宣告與定義分開,...
c 類模板 STL(1)
定義類模板 template iterator it 訪問乙個迭代器所指向的元素 迭代器變數名 如 it 5 3 演算法 即很多函式模板的集合,提供了大量演算法,用於操作各種容器。包括了比較 排序 修改 複製等等 演算法通過迭代器操作容器中的元素 vector實際上是對動態陣列的封裝,與陣列一樣,v...
C 類 物件 模板與STL
類 乙個特殊的概念,再c 語言中是乙個新的資料型別,可以是對同一型別事物進行抽象處理,也可以是乙個層次結構中的不同層次節點。類的宣告與定義 類中的成員函式的定義方法 1.將類的成員函式都定義在類體內 2.將類的成員函式的實現放在類體外,但如果類成員函式定義在類體外,需要用到域運算子 當多個原始檔都引...