排序演算法中比較函式的運用

2021-08-23 11:28:18 字數 1081 閱讀 1164

假如我們有乙個**如下,

1,5

2,3

3,7

需要根據第二例排序。我們應該怎麼辦呢?這裡使用python作為範例,其他語言提供類似的泛型程式設計方法。

對這個資料排序可以寫出如下**:

def customcmp(a,b):

return cmp(a[1],b[1])

mylist=

a=[1,5]

b=[2,3]

c=[3,7]

mylist.sort(customcmp)

for t in mylist:

print t

對應python中list的排序演算法,我們只要指定的比較函式,我們就可以得到正確的排序結果。

上面的程式得到的是公升序排列的結果。如果我們要得到降序排列的結果,我們只需要在cmp函式前面新增乙個負號,如下:

defcustomcmp(a,b):

return-cmp(a[1],b[1])

我們發現,這樣cmp每次都要取負,效率有點問題。如果我們修改一下,變為:

修改比較函式我們可以的比較特殊的排列效果,例如我們先對第二個字段安裝奇數降序,再

對偶數降序,所有的奇數都在偶數的前面,**如下:

def mycmp(a,b):

if a[1]%2==1andb[1]%2==0:

return -1;

elif a[1]%2==0andb[1]%2==1:

return 1;

return cmp(b[1],a[1])mylist=

a=[1,5]

b=[2,3]

c=[3,7]

d=[4,2]

e=[5,4]

mylist.sort(mycmp)

for t in mylist:

print t

[3, 7]

[1, 5]

[2, 3]

[5, 4]

[4, 2]

演算法中比較器的使用

實現比較器的方法有兩種 實現comparable,在比試中用的比較少。人為的定義對類的比較,去實現comparator介面 我們定義乙個學生類,定義他的name,id,age屬性,通過id和age對他進行排序,這時我們用比較器對其進行排序 前面元素減去後面元素如果為負數,則前面小排在前面。反之,則大...

盤點MySQL中比較實用的函式

之前小編在工作中遇到一些處理資料的問題,例如完成日期格式化,獲取幾天後的時間,生成指定格式的編碼等問題,這時候小編經常會寫一大堆邏輯 來進行處理,還自己感覺自己很流弊的樣子,後來卻發現同事遇到相同的問題並沒有寫一大堆邏輯 好奇心下促使我偷偷的看了下同事的 才明白他們很喜歡使用sql中的函式直接處理了...

排序演算法中的穩定性 排序中比較容易忽略的東西

如果乙個排序演算法能夠保留陣列中重複元素的相對位置則可以被稱為穩定的 演算法 第四版 在進行排序的時候,難免會出現相同元素的值。比如 7,4,4,3,8,9 對該陣列進行排序,使用不同的排序演算法都會變得有序,但有些演算法不能保證數列中兩個四的相對位置,我將 7,4,4,3,8,9 數列中第乙個4,...