C sort 排序(降序 公升序)使用總結

2021-07-09 14:09:46 字數 1332 閱讀 3322

c++ sort 函式十分方便,可以對內建型別也可對自定義型別進行快速排序,內建型別的使用比較簡單,下面主要討論自定義型別的排序,一般有如下幾種使用方法:

比如,我們現有一批學生,要根據他們的成績進行公升序排序,成績如果相等則根據名字公升序排序,那麼我們可以如下操作:

struct student

bool operator < (const student& rhs) const

friend void operator << (ostream& output, const student& s)

};

int main()

sort(begin(vec),end(vec));

cout << endl << "after:" << endl;

for(auto& s : vec)

return 0;

}

執行結果如下圖:

當然,我們也可以自己寫比較函式,實現如下:

bool cmp(const student& lhs, const student& rhs)
按如下方式呼叫:

sort(begin(vec),end(vec), cmp);
另外一種方式,即構造乙個函式物件,抑或叫 functor,其實就是實現了過載 operator() 的乙個類,**如下:

struct compare

};

按如下方式呼叫:

sort(begin(vec),end(vec), compare());
c++11有了 lambda 之後,就不必再為某些小函式寫具名函式了,如下使用即可:

sort(begin(vec), end(vec), (const student& lhs, const student& rhs) );
降序排序的方法與公升序類似,如果採用比較函式、lambda 或者比較函式的方式,只需要改一改比較條件就ok了,但是,如果對於student類,我們定義了 operator < 之後,不想為了降序排序再定義乙個 operator > 怎麼辦?兩種辦法!

公升序排序之後,用 reverse 反轉即可。

直接按如下方式呼叫即可,不用再去過載 operator >

sort(vec.rbegin(), vec.rend());

氣泡排序公升序降序

氣泡排序 時間複雜度 o n2 實 質 把小 大 的元素往前 後 調 氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次...

排序箭頭,公升序,降序簡單實現

css不好實現的效果,通過背景來彌補。預設 銷量新品 效果有了,剩下的就是通過js邏輯和程式邏輯來實現排序了。html改造 預設 sortedascsorteddescsorted data type sale role columnheader tabindex 0 aria controls s...

排序箭頭,公升序,降序簡單實現

css不好實現的效果,通過背景來彌補。aria label domain activate to sort column ascending 預設th class sort sortedasc role columnheader tabindex 0 aria controls sample tab...