卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

深入了解C 的sort和stable_sort函數(shù)

sort和stable_sort,內(nèi)部實(shí)現(xiàn)是“快速排序”,都是C 的自帶函數(shù),提供了方便又高效的排序。那么我們?cè)撊绾问褂盟鼈兡兀? sort函數(shù)的基本用法 sort函數(shù)是C 自帶的排序函數(shù),期望

sort和stable_sort,內(nèi)部實(shí)現(xiàn)是“快速排序”,都是C 的自帶函數(shù),提供了方便又高效的排序。那么我們?cè)撊绾问褂盟鼈兡兀?/p>

sort函數(shù)的基本用法

sort函數(shù)是C 自帶的排序函數(shù),期望時(shí)間復(fù)雜度是 O(nlogn),其中 n 是待排序的元素個(gè)數(shù)。要在頭文件中加上include。圖為快速排序,該圖來源于網(wǎng)絡(luò)。

sort的使用方法也很簡(jiǎn)單,如果將一個(gè)區(qū)間要從小到大排:sort(區(qū)間首指針(或迭代器),區(qū)間尾指針(或迭代器))。注意這里的區(qū)間是左閉右開的,即排序的時(shí)候不會(huì)包含尾指針存儲(chǔ)的元素。

如果我們要排序的不是數(shù)組,而是別的STL容器,比如vector,它的首迭代器就是begin(),尾迭代器就是end()。正巧,所有STL容器也是左閉右開的,所以我們就可以這么寫:sort((), v.end())。

利用sort進(jìn)行自定義排序

但是,沒有任何“花里胡哨”的sort只能從小到大排序,如果我們要從大到小排序,或者更復(fù)雜,那該怎么辦呢?也很簡(jiǎn)單,你只需要寫一個(gè)cmp函數(shù)即可sort(首,尾,cmp)。這個(gè)cmp有什么用呢?你可以用它改變排序的規(guī)則。

接下來我們?cè)敿?xì)講解一下cmp函數(shù)的寫法。首先,cmp是個(gè)bool類型的函數(shù),應(yīng)包含兩個(gè)和所要排序元素同類型的參數(shù)。例如待排序的元素為int:bool cmp (int x, int y)或者自定義的結(jié)構(gòu)體student: bool cmp(student x, student y)。

定制排序規(guī)則

排序規(guī)則很關(guān)鍵,你可以想象一下,x在y的左邊,當(dāng)cmp返回true時(shí),不改變他們的順序,返回false時(shí),就將x和y交換。cmp加強(qiáng)版:如果有多個(gè)排序要求,按優(yōu)先級(jí)一個(gè)一個(gè)寫下來即可。例如我們按照“分?jǐn)?shù)從高到底,分?jǐn)?shù)一樣按名字字典序排”。

通過靈活運(yùn)用sort和stable_sort函數(shù),我們可以輕松實(shí)現(xiàn)各種不同規(guī)則下的排序需求,提高代碼的效率和可讀性,為C 編程帶來更多便利。

標(biāo)簽: