`
poson
  • 浏览: 364411 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

 

 

 

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

 

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.append(a);
mylist.append(b)
mylist.append(c)
mylist.sort(customCmp)
for t in mylist: 
	print t

 

 

 

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

 

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

  1. defcustomCmp(a,b):
  2. 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.append(a);
mylist.append(b)
mylist.append(c)
mylist.append(d)
mylist.append(e)
mylist.sort(mycmp)
for t in mylist: 
 print t

 

 

 

 

 

 

[3, 7]

 

 

[1, 5]

 

 

[2, 3]

 

 

[5, 4]

 

 

[4, 2]

 

 

 

 

 

分享到:
评论

相关推荐

    冒泡排序算法的C++函数模板

    在 main 函数中,我们可以看到如何使用这个冒泡排序算法的C++函数模板来排序整数数组和浮点数数组。首先,我们定义了一个整数数组a和一个浮点数数组b,然后使用BubSort函数对它们进行排序。最后,我们输出排序后的...

    C语言程序设计-编写函数用选择排序法对数组中的数据进行从小到大的排序;

    功能:编写函数用选择排序法对数组中的数据进行从小到大的排序;

    递归函数 递归排序法

    本篇将深入探讨递归函数的概念,递归排序法,以及如何在C语言中实现它们。 首先,我们要理解什么是递归函数。递归函数是指函数在执行过程中调用自身,每次调用都会产生一个新的子问题,直到子问题足够简单,可以...

    各种排序算法性能的比较

    本课程设计中,我们将对八种内部排序算法的性能进行分析和比较。 1. 直接插入排序(Insertion Sort) 直接插入排序是一种简单的排序算法,它的工作原理是将每个元素依次插入到已经排序好的子序列中。该算法的时间...

    选择法排序 用函数_C选择法排序_

    选择法排序是一种简单的排序算法,它的基本思想是每一次从未排序的序列中找到最小(或最大)的元素,放到已排序序列的末尾,直到全部待排序的数据元素排完。这个过程可以通过C语言来实现,因此我们可以看到这个...

    python排序算法和函数介绍

    在 Python 中,还有其他的排序算法和函数,例如 Timsort、Heapq、Merge Sort 等,每种算法和函数都有其特点和应用场景。选择合适的排序方法可以提高开发效率和代码质量。 在实际开发中,排序算法和函数是非常重要的...

    各排序算法时间复杂度的比较

    本文将比较几种排序算法的时间复杂度,包括快速排序、选择排序、直接插入排序和堆排序算法,并在排序数据中快速查找某一数据,给出查找是否成功,以及数据所在的位置信息。 在详细设计中,我们首先来读取文件中的...

    数据结构 排序算法的比较

    在上述课程设计中,通过生成随机数并使用四种基本排序算法(冒泡排序、选择排序、直接插入排序和快速排序)进行排序,然后记录每种算法的执行时间和比较次数,以直观地比较它们的效率。此外,程序还需要具有友好的...

    函数模板对数组冒泡排序

    在本例中,函数模板`BubbleSort`实现了冒泡排序算法,通过遍历数组并比较相邻元素来实现排序。 3. mystring类的定义:在本例中,定义了一个名为`mystring`的类,用于表示字符串。该类包含了一个字符数组`str`,两个...

    排序算法比较 C实现

    此设计题目要求了解掌握各种排序算法、分析其优劣。故设计总体框架如下:定义一个主函数,在主函数中定义一个长度MAXSIZE=31000的数组,存放随机数。 在主函数中,定义该线性表的初始长度为零,并调用为该一维顺序...

    使用函数模板进行排序

    在Visual C++中,我们可以方便地使用`std::sort`进行排序,但如果我们需要自定义排序规则或者对特定类型的数据进行排序,可以提供比较函数对象或使用成员函数指针。比如,我们有一个自定义的`Person`类,可以按照...

    最快的排序算法 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法,排序算法数据结构

    排序算法是计算机科学中一个基础且重要的领域,涉及到数据处理和效率优化。在C++中,`std::sort`函数是一个非常实用的工具,它提供了高效且灵活的排序方式。本文将详细介绍`std::sort`的使用,包括基本的vector排序...

    用C语言实现常用排序算法

    本项目旨在实现并比较六种经典的排序算法——直接插入排序、折半插入排序、起泡排序、简单选择排序、堆排序以及2-路归并排序,使用C语言编程。为了全面评估这些算法,我们将在一组随机生成的30000个整数上运行它们,...

    [C语言] 使用回调函数实现冒泡排序

    在冒泡排序算法中,我们可以使用回调函数来比较元素。我们可以定义一个回调函数,例如`int_cmp`,该函数用于比较两个整型数的大小。然后,我们可以将该回调函数作为参数传递给冒泡排序函数,以便在排序过程中使用该...

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

    在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中进行排序的算法,常见的内部排序算法有冒泡排序、选择排序、插入排序、归并排序、快速...

    快速排序函数代码

    在本篇文章中,我们将深入探讨一个关于快速排序算法的具体实现——通过模板函数的形式来完成排序任务。快速排序是一种高效的排序算法,在实际应用中被广泛采用。该算法的主要优点在于其速度较快,平均时间复杂度为O...

    Java实现蓝桥杯VIP算法训练 二元函数_Java实现蓝桥杯VIP算法训练二元函数_major2fo_frequentlyeb

    本话题主要关注的是如何使用Java来实现二元函数,这对于理解计算机科学中的函数概念以及如何在实际问题中应用它们至关重要。 二元函数是指接受两个输入参数并返回一个输出结果的函数。在Java中,我们可以创建一个...

    堆排序与直接插入排序算法的比较

    堆排序与直接插入排序算法的比较 堆排序和直接插入排序是两种常用的排序算法,分别具有不同的时间和空间复杂度。本文将通过对两种排序算法的实现和比较,分析它们的优缺点,并讨论在不同场景下的应用。 1.1 功能...

    快速排序算法 C语言实现

    在本实现中,我们使用 C 语言来实现快速排序算法。首先,我们需要定义一个记录的数据结构,包括键值和信息两个部分。然后,我们定义一个排序对象,包括记录数组和记录的个数。我们还需要定义四个函数,分别用于创建...

Global site tag (gtag.js) - Google Analytics