1. 程式人生 > >關於sort中cmp一個小問題

關於sort中cmp一個小問題

如果想用cmp進行從大到小的排序用下列的程式碼時,

bool cmp(int a, int b){

if(a != b) return a > b;

}

用PAT判斷時 可能會出現段錯誤;例A1037.

正確的寫法應該是

bool cmp(int a, int b){

return a > b;

}

具體原因還不是很懂,但是用cmp一定要保證嚴格弱排序的規則,一定要保證所有情況都有返回bool的值。

嚴格是說在判斷的時候會用"<",而不是"<=",弱排序是因為,一旦"<"成立便認為存在"<"關係,返回ture,而忽略了"="關係和">"區別,把它們歸結為false

一個小技巧:

    bool cmp(data type a, data type b){

        if(a.num == 0 || b.num == 0) return a.num > b.num;        

        else a.num < b.num;

    }

這樣就能讓num為0的排在後面, 非零的以遞增的順序排在後面。