java中sort的cmp_快速排序(cmp函数详解)

本文详细介绍了Java中`Collections.sort()`使用`Comparator`接口的`compareTo`方法进行比较的原理,结合C语言的`qsort`的`cmp`函数举例说明比较规则。并概述了快速排序的基本思想和步骤,包括如何选择基准、分区和递归排序的过程。
摘要由CSDN通过智能技术生成

缘由:上次给某同学讲

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

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;

}

}

int main()

{

int k[10] = { 6,1,2,7,9,3,4,5,10,8 };

qsort(k, 10,sizeof(int), cmp);

for (int i = 0; i < 10; i++) {

printf("%d ", k[i]);

}

return 0;

}

942226204.png

如图中所示所有元素实现了从大到小的排序

然后我们开始说快速排序

百科定义:

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

简单的说:

(默认以从小到大排序)

1.找基准,默认为数组的第一个

2.先从右向左找比基准小的,记录位置j

3.后从左向右找比基准大的,记录位置i

4.交换j,i位置的元素

5.j向左移动,找比基准小的数的位置

6.i向右移动,找比基准大的数的位置

7.交换i,j位置的元素

8.重复5-7步操作,直到i和j相遇,然后交换i和基准位置的数

9.对数组i的左半部分递归进行相同的操作

10.对数组的i的右半部分递归进行相同的操作

1746463358.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值