b站二面時,面試官問了乙個問題,沒打出來感覺挺虧的。
問題是:stl中的sort函式用的什麼排序演算法?這個問題我之前看面經的時候,看了一眼,但是當時沒有仔細研究過。大致知道裡面用了快速排序。
stl的sort()演算法,資料量大時採用quick sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免quick sort的遞迴呼叫帶來過大的額外開銷,就改用insertion sort(插入排序)。如果遞迴層次過深,還會改用heap sort。
stl
中的sort
並非只是普通的快速排序,除了對普通的快速排序進行優化,它還結合了插入排序和堆排序。根據不同的數量級別以及不同情況,能自動選用合適的排序方法。當資料量較大時採用快速排序,分段遞迴。一旦分段後的資料量小於某個閥值,為避免遞迴呼叫帶來過大的額外負荷,便會改用插入排序。而如果遞迴層次過深,有出現最壞情況的傾向,還會改用堆排序。
快速排序最關鍵的地方在於樞軸的選擇,最壞的情況發生在分割時產生了乙個空的區間,這樣就完全沒有達到分割的效果。stl
採用的做法稱為median-of-three
,即取整個序列的首、尾、**三個地方的元素,以其中值作為樞軸。
stl中sort函式詳解
1.sort 函式的形式 sort first pointer,first pointer n,cmp 函式的第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。第二個引數相對較好理解,即首位址加上陣列的長度n。最後乙個引數是比較函式的名稱 一般比較函式名字都用cmp,當然這個...
STL中sort 函式的用法
在做acm題的過程中,演算法中經常會用到排序的處理,自己寫排序有點麻煩,最主要是記不住排序演算法的 stl中的sort函式有兩種 template ranit void sort ranit fist,ranit last template ranit,class pred void sort ra...
STL中sort函式用法簡介
做 acm題的時候,排序是一種經常要用到的操作。如果每次都自己寫個冒泡之類的 o n 2 排序,不但程式容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。stl裡面有個 sort函式,可以直接對陣列排序,複雜度為 n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳兩個引數或三個引數。第...