java代码之排序算法知识概括

1、排序定义
排序就是就是把一组无序的记录按照其关键字的某种次序排列起来,使其具有一定的顺序,便于进行数据的查找。
2、排序分类:
2.1如果按照排序过程中依照的不同原则对内部排序方法进行分类:
插入排序、交换排序、选择排序、归并排序、分配排序
2.2 如果按照其工作量来分类:
简单的排序方法:其时间复杂度为O(n^2);
先进的排序方法:其时间复杂度为O(nlog2为底n)
基数排序:其时间复杂度为O(d*n)
3、排序记录的存储方式
有3种,分别是:顺序结构、链式存储结构、辅助表
4、评价算法的标准
算法执行的时间、算法所需要的附加空间、另外算法本身的复杂度也是考虑的重要因数。其中时间的开销:主要用算法执行中关键字的比较次数和记录移动的次数来衡量。

5、排序算法的选择
5.1、选择排序算法需要考虑的主要因数
(1)待排序的记录个数
(2)记录本身的大小和存储结构
(3)关键字的分布情况
(4)对排序稳定性的要求
(5)时间和空间复杂度的等
5.2、排序方法的选取
(1)若待排序的一组记录数目n较小(如n<=50),则采用插入排序或选择排序
(2)若n较大,则采用快速排序、堆排序、归并排序
(3)若待排序列记录按关键字基本有序(正序或反序),则适宜选用直接插入排序、冒泡排序、快速排序。
(4)当n很大而且关键字位数较少时,采用链式基数排序较好
(5)关键字比较次数与记录的初始排序顺序无关时,适宜用选择排序
5.3、排序方法记录的存储方式要求
(1)当记录本身信息量较大时,插入排序、归并排序、基数排序易于在链表上实现
(2)快速排序、堆排序更适合在索引结构上排序
(3)一般的排序方法都适合在顺序结构(一堆数组)上实现
6、各种算法的比较
6.1、常用的算法
直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序
6.2、按时间复杂度比较
O(n^2):直接插入排序、直接选择排序、冒泡排序
O(nlog2为底n):快速排序、归并排序、堆排序
希尔排序的时间复杂度很难计算,有几种接近的答案:O(nlog2为底n)或O(n^1.25)
基数排序的时间复斜体样式杂度:O(d*(r*d+n)),其中rd是基数,d是关键字的位数,n是元素的个数
6.3、稳定性
算法稳定:直接插入排序、冒泡排序、归并排序、基数排序
算法不稳定:直接选择排序、希尔排序、快速排序、堆排序
7、辅助空间(空间复杂度)
O(1):直接插入排序、直接选择排序、冒泡排序、希尔排序、堆排序
O(nlog2为底n):快速排序
O(n):归并排序
O(n+rd):基数排序

6.4、辅助空间(空间复杂度)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值