现在的位置: 首页 > 综合 > 正文

排序算法中比较函数的运用

2013年04月16日 ⁄ 综合 ⁄ 共 920字 ⁄ 字号 评论关闭
 

 

 

假如我们有一个表格如下,

1,5

2,3

3,7

需要根据第二例排序。我们应该怎么办呢?这里使用python作为范例,其他语言提供类似的泛型编程方法。

 

对这个数据排序可以写出如下代码:

  1. def customCmp(a, b):
  2.     return cmp(a[1],b[1] )
  3. mylist=[]
  4. a=[1,5]
  5. b=[2,3]
  6. c=[3,7]
  7. mylist.append(a);
  8. mylist.append(b)
  9. mylist.append(c)
  10. mylist.sort(customCmp)
  11. for t in mylist:
  12.     print t

对应pythonList的排序算法,我们只要指定的比较函数,我们就可以得到正确的排序结果。

上面的程序得到的是升序排列的结果。如果我们要得到降序排列的结果,我们只需要在cmp函数前面添加一个负号,如下:

  1. def customCmp(a, b):
  2.     return -cmp(a[1],b[1] )

我们发现,这样cmp每次都要取负,效率有点问题。如果我们修改一下,变为:

  1. def customCmp(a, b):
  2.     return cmp(b[1],c[1] )

这样一个完美的降序排列的结果就得到了。

 

修改比较函数我们可以的比较特殊的排列效果,例如我们先对第二个字段安装奇数降序,再

对偶数降序,所有的奇数都在偶数的前面,代码如下:

  1. def mycmp(a, b): 
  2. if a[1] % 2==1 and b[1] % 2==0: 
  3.      return -1; 
  4. elif a[1] % 2==0 and b[1] % 2==1: 
  5.          return 1;
  6. return cmp(b[1],a[1] ) mylist=[]
  7. a=[1,5]
  8. b=[2,3]
  9. c=[3,7]
  10. d=[4,2]
  11. e=[5,4]
  12. mylist.append(a);
  13. mylist.append(b)
  14. mylist.append(c)
  15. mylist.append(d)
  16. mylist.append(e)
  17. mylist.sort(mycmp)
  18. for t in mylist:
  19.     print t

得到结果是:

[3, 7]

[1, 5]

[2, 3]

[5, 4]

[4, 2]

抱歉!评论已关闭.