算法很美笔记(Java)——查找与排序(算法总结)

查找

基于比较的查找

最快O(logN):折半查找、平衡二叉树、红黑树……

Hash表却有O(c)先性级别的效率,特殊情况下达到O(1)

排序

比较排序

最快O(nlogn),其中快排最好,但主元选不好会极大降低性能

快排是原址的,且不开辟辅助空间

堆排序,是原址的,但慢,但可以用于海量数据

时间复杂度

O(n^2)

冒泡排序

效率低

插入排序

效率低,但当序列基本有序的时候,有奇效

选择排序

 效率低,但经常用它内部循环的方式找max和min

O(n^1.3)

希尔排序

缩小增量排序,是插入排序的改良

O(nlogn)

快速排序

常用,核心:partition,时间复杂度是一个范围,快慢取决于问题

归并排序

常用,核心:合并,用空间换时间,稳定,无论什么问题,时间复杂度都是O(nlgn)

堆排序

不常用,比快排和归并慢,因为时间复杂度带常数因子,且较大

O(log n)

二分查找,javaAPI里有,直接调用

Arrays.binarySearch(s1,a);

 非比较排序

在特定情况下可以做到绝对比比较排序快

计数排序

O(n + k) , k = getMax(arr)

最快,适用范围:元素分布相对集中,已知边界,且边界较小

桶排序

O(n + c) ,c = n * (logn - logm)

适用范围;元素分布较均匀,越均匀c越小,极其不均匀已致所有元素都在一个桶,时间复杂度将变成O(nlgn)

基数排序

O(n)

整数行排序里又稳又快,不受问题影响,开辟固定空间

对于十进制整数来说,基数排序最常用

javaAPI封装的排序

Arrays.sort(快排+插入)
时间复杂度取决于它排序的数据类型和数组的大小。

是基于比较、会改变数组内容

想利用排序后的结果的用这个

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值