sort函式的排序原理

2021-10-19 23:35:40 字數 1557 閱讀 9393

sort函式的排序原理

sort()方法的比較邏輯為:

第一輪:1和5比,1和4比,1和2比

第二輪:5和4比,5和2比

第三輪:4和2比

sort函式,對給定區間所有元素進行排序,預設為公升序,也可進行降序排序。

sort函式進行排序的時間複雜度為n*log2n(注意:不是快排===>qsort()是快排),比冒泡之類的排序演算法效率要高,sort函式包含在標頭檔案為#include的c++標準庫中

語法

sort(start,end,cmp)

(1)start表示要排序陣列的起始位址;

(3)cmp用於規定排序的方法,可不填,預設公升序。

以上不是重點,重點是cmp()的書寫方法:

重點sort()方法會接受乙個比較函式compare(a, b),該函式要比較兩個值,然後返回乙個用於說明這兩個值的相對順序的數字。

在此函式中,a預設為在陣列前面,b在陣列後面;

comp函式返回乙個bool型別的值,這個值表示了在嚴格弱排序中(可以理解為公升序排序)第一引數是否位於第二個引數之前。

也就是說如果comp返回true,則第乙個引數小於第二個引數,sort根據compare的返回值將第乙個引數排在第二個引數之前。

如果comp返回false,則第乙個引數大於第二個引數,sort根據compare的返回值將第乙個引數排在第二個引數之後。

傳入a,b,定義bool myfunction (int i,int j) ,作為comp函式,

傳入ab,返回false,則排列為ba,

傳入ba,返回true,排列為ba。

是降序排列的。

由以上解釋,看下面例子:

int cmp(int a,int b)

上面中如果a>b;返回的是true,則說明a在前,b在後;

那麼結果就是a,b;

如果真實情況下,a結果就是b,a;

對於普通的陣列來說:

return a>b;//從高到低

return a不過除了以上例項,還有一些內建型別的比較;

less《資料型別 >()//從小到大排序

greater《資料型別 >()//從大到小排序

less<>的結構體

templatestruct less

};

greater的結構體

templatestruct greater

};

看不懂沒關係,知道有這種型別就可以了;
對於stl來說,

sort(a.begin(),a.end())//需要使用迭代器;

理解sort 函式的排序原理

看了很多關於sort 函式的定義和解釋還是不太清楚,尤其是初學者很容易看懵,這裡講講自己是如何理解的。首先,要理解sort 內部是利用遞迴進行氣泡排序的 例如 var arr 1,5,4,2 sort 方法的比較邏輯為 第一輪 1和5比,1和4比,1和2比 第二輪 5和4比,5和2比 第三輪 4和2...

C 中sort排序函式的原理用法

sort函式可以用來給指定區間內的資料按照某種規則排序,在這裡貼一下sort函式的 templateinline void sort ranit first,ranit last,pr pred 能夠看出該函式是經過多層呼叫的,再深層次就不貼了大家可以開啟 庫看。使用時預設情況下是兩個引數,例如 v...

sort排序函式

所以自己總結了一下,首先看sort函式見下表 函式名 功能描述 sort 對給定區間所有元素進行排序 stable sort 對給定區間所有元素進行穩定排序 partial sort 對給定區間所有元素部分排序 partial sort copy 對給定區間複製並排序 nth element 找出給...