算法学习笔记-排序

为了长远的目标,今年开始重新学习计算机基础知识。从豆瓣读书上把tag为编程的,9分以上的书差不多都买了。

写写博客,仅为了自己复习巩固。

看的书是《算法(第四版)》号称是最简单的入门书。

全书都是用的java写的实例,不错,看着亲切,但是代码风格我是不喜欢,作者喜欢省略花括号,条件的执行语句如果一条,会将条件语句,执行语句放一行。

不过这个不是重点,代码风格上我是坚持的《重构》里的格式。


学习么,循序渐进,我也不指望看第一遍就全看懂,所以书内的大部分习题,准备在第二轮巩固学习时再看。

从这个排序这一章节,学到了初级排序与高级排序;

初级排序:

选择排序:每一轮找到最小的和每轮开始位置的值替换。时间复杂度O(N^2)

插入排序:每一轮开始位置的值与前面有序的部分比较,确定该插入的位置,然后将大于该值的往右移动一位,将该值插入。时间复杂度O(N^2)

希尔排序:基于插入排序,插入排序的最坏情况是最小值在最右侧,将这个值移动到指定位置,操作会比较多。希尔排序定义了一个增量,

我这书里是定义 while(h<N/3){h=h*3+1}  h为:1,4,13.。。。,根据数据大小,会执行多轮的插入排序。

假设数组大小为15个,那h初始值4,也就是有2轮。第一轮的时候,0,4,8,12->1,5,9,13->2,6,10,14.....按这样的子数组执行插入排序,

这样,右侧的小值就可以高效的移动到左侧,每一次的插入排序都使整个数组更有序。基于这个增量,时间复杂度:O(N^6/5)


高级排序:

归并排序:将一个大数组一分为二,不断的分,子数组有序后,将2个有序子数组不断归并,最后就整体有序了。在操作过程中需要额外的N空间做归并用,

时间复杂度O(NlogN)

快速排序:取一个值,一般取low位,然后切分操作,使切分后,小于等于该值的在该值左侧,大于等于的在该值右侧,不断这样的操作,最终子数组都有序了整体就有序了。

为了避免最坏情况,就是low位总是最小值或最大值,造成切分后一边几乎没有,都在另一边,所以排序前,先乱序下。

一般常用的是三向切分快速排序,在切分后,会有三段数据,小于切分值的,等于切分值,大于切分值的,中间这段就已经是最终位置了,左右两边再继续快排。

时间复杂度为O(N~NlogN)

注:排序还有个稳定性的概念,插入排序与归并排序是稳定的。

例如我有个对象是航班,对象里有3个值,其中有【出发地】与【出发时间】,假设我的初始数据是【出发时间】升序的,如果使用了稳定的排序算法去排序【出发地】,那排序后的数据是【出发地】升序【出发时间】升序,否则就是【出发地】升序【出发时间】无序

在Java内置的sort方法,对于基本类型使用的是快速排序,对于引用类型使用的归并排序。

堆排序:先将数据放入一颗二叉树(数组实现),将它堆有序(每个节点都大于等于它的2个子节点),然后不断的将最大值放到数组末尾,然后再使剩下的树堆有序,最后树没了,数组有序了。

这个有点抽象,得看着图才好理解。书里是将一个数组模拟成二叉树,下标0不用,1为根节点,2,3为1的子节点,依次下去。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值