sort函式及其元素排序方式定製

2021-10-16 03:45:48 字數 2790 閱讀 7177

《劍指offer》面試題45:把陣列排成最小的數

輸入乙個非負整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。

示例 1:

輸入: [10,2]

輸出: "102"

示例 2:

輸入: [3,30,34,5,9]

輸出: "3033459"

思路:其解法是貪心的(貪心策略的證明詳見書229頁),就是將陣列中的所有數字轉換為字串,再將各個字串按照字典序從小到大進行排列,並進行拼接即為所求解的字串,其中進行排序的過程會遇到大數問題,所以按照字典序進行比較排序是該題的重難點。

自定義字串比較器,若a+b>b+aa>b,比如"3"+「23」>「23」+「3」,即"323">"233"則3>23,並且我們希望在排序的時候將23排在3的前面,也就是公升序排列。

**如下:

class

solution

//sort函式當中的compare即為自定義的字串公升序比較器

注意

舉例:

// sort algorithm example

#include

// std::cout

#include

// std::sort

#include

// std::vector

bool myfunction (

int i,

int j)

struct myclass

} myobject;

int main ();

std::vector<

int> myvector (myints, myints+8)

;// 32 71 12 45 26 80 53 33

// using default comparison (operator

std::sort (myvector.

begin()

, myvector.

begin()

+4);

//(12 32 45 71)26 80 53 33

// using function as comp

std::sort (myvector.

begin()

+4, myvector.

end(

), myfunction)

;// 12 32 45 71(26 33 53 80)

// using object as comp

std::sort (myvector.

begin()

, myvector.

end(

), myobject)

;//(12 26 32 33 45 53 71 80)

// print out content:

std::cout <<

"myvector contains:"

;for

(std::vector<

int>

::iterator it=myvector.

begin()

; it!=myvector.

end();

++it)

std::cout <<

' '<<

*it;

std::cout <<

'\n'

;return0;

}

由上例子可以看出:

★★★總結:

對compare的定義:

除了在演算法中使用compare函式,也可在容器類定義時指定compare,使得所新增元素滿足自定義排序要求。

例如劍指offer41:資料流中的中位數:

priority_queue<

int, vector<

int>

, less<

int>> maxheap;

//less是實驗性c++特性

//通過該語句可以得到最大堆

sort排序函式

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

sort 排序函式

需要標頭檔案 語法描述 sort begin,end,cmp cmp引數可以沒有,如果沒有預設公升序排序。sort函式使用例項 include include includeusing namespace std int main sort a,a 5 for int i 0 i 5 i cout ...

sort 排序函式

include include 因為用了sort 函式 include 因為用了greater using namespace std void main int i int len sizeof a sizeof int 這裡切記要除以sizeof int sort a a len,greater...