快速排序(cmp函数详解)

缘由:上次给某同学讲Collections.sort()
在Comparator接口重写compare方法,被比较规则卡壳,于是有了下文

@Override
public int compareTo(Employee o) {
    if(this.id > o.id)
        return -1;
    else if(this.id < o.id)
        return 1;
    else
        return 0;
}

首先总结规律
这里以c语言标准qsort的cmp为例,Java等同理
下图中,传入两个参数,num1,num2,转换成整型就是a,b
如果a>b时,返回值>0则a排在b后面,对应的从小到大排序
如果a>b时,返回值<0则a排在b前面,对应的从大到小排序

int cmp(const void* num1 ,const void* num2) {
    int a = *(const int*)num1;
    int b = *(const int*)num2;
    if (a > b) {
        return -1;//从大到小
    }
    else if (a == b) {
        return 0;
    }
    else {
        return 1;
    }
}

以下面代码为例

#include<stdio.h>
int cmp(const void* nu
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速排序是一种常用的排序方法,在c标准库中也有相关的函数可以使用。快速排序的时间复杂度最好为O(nlogn),最坏情况下为O(n²),它是一种不稳定的排序方法。 在c标准库中,使用快速排序函数的方法如下: 1. 首先要包含头文件#include <algorithm>,这样才能使用标准库中的排序函数。 2. 定义一个自定义比较函数,该函数用于指定排序的顺序。比较函数需要两个参数,返回一个bool值,表示第一个参数是否应该排在第二个参数之前。如果想要从小到大排序,比较函数应该返回a>b;如果想要从大到小排序,则应该返回a<b。比较函数的定义可以放在main函数的前面部分。 3. 在使用快速排序函数时,需要传入三个参数:待排序数组的起始地址、结束地址(即最后一个元素的地址+1)、自定义比较函数函数名。如果不指定自定义比较函数,则默认按照从小到大的顺序排序。 以下是一个使用快速排序函数的示例代码: #include <iostream> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a > b; } int main() { int a[] = {5,3,7,3,9,4}; sort(a, a+6, cmp); for(int i = 0; i < 6; i++) { cout << a[i] << " "; } return 0; } 这段代码中,定义了一个自定义比较函数cmp,用于从大到小排序。然后使用sort函数对数组a进行排序,指定了自定义比较函数cmp。最后输出排序后的数组a。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值