C++排序探索:二桶排序与自定义cmp函数

需积分: 25 0 下载量 2 浏览量 更新于2024-08-24 收藏 310KB PPT 举报
"二桶排序-排序和cmp函数(更新版)(1)" 本文主要介绍了两种排序方法:C++中的`sort`函数以及桶排序算法,并详细讲解了如何自定义排序规则的`cmp`函数。 一、sort排序 `sort`是C++标准库中的一个函数,位于`<algorithm>`头文件中,其时间复杂度为O(n*log(n))。`sort`函数接受三个参数,分别是待排序数组的起始地址、结束地址以及一个可选的排序规则。如果不提供第三个参数,`sort`默认按照升序对元素进行排序。例如,对于整型数组`inta[]{2,7,1,5,0}`,可以使用`sort(a, a+5)`进行排序。如果需要降序排序,可以使用`sort(a, a+5, greater<int>())`。此外,对于结构体数组,如`stu`结构体,可以通过自定义`cmp1`函数来实现按照结构体成员排序,例如按照成绩`chengji`降序排列。 二、cmp函数 `cmp`函数用于自定义排序规则。例如,当需要根据结构体`stu`的`chengji`字段降序排序时,可以定义`bool cmp1(stu a, stu b)`,返回`a.chengji > b.chengji`的结果。对于整型数组,也可以定义类似`bool cmp2(int a, int b)`的函数,根据需要进行升序或降序排列。对于更复杂的排序需求,如结构体`node`按照`x`字段升序,若`x`相同则按`y`字段升序排列,可以编写`bool cmp3(node a, node b)`函数,根据条件判断返回结果。 三、桶排序 桶排序是一种非比较型的排序算法,适用于数据分布均匀的情况。在本例中,假设有一个班级的成绩分布,最高分为10分,最低分为0分。首先,创建一个大小为11的数组`a[11]`,用作桶,初始化所有元素为0。然后遍历每个成绩,将其放入对应的桶中(例如,成绩为5分的同学对应`a[5]`计数加1)。最后,遍历桶,按照桶的顺序依次输出桶内元素,完成排序。这种方法尤其适用于数据已近似均匀分布的场景,效率较高,但当数据分布极度不均时,效率会降低。 总结,本文通过实例详细阐述了C++中`sort`函数的使用和自定义`cmp`函数的编写,以及介绍了桶排序的基本思想和应用。理解并掌握这些内容,有助于在实际编程中灵活处理各种排序需求。