408第一季 - 数据结构 - 排序

排序的概念

外部排序很难,后面都是内部排序 

插入排序

直接插入排序

理解

这个排序第一轮是从第二个元素开始的

然后是从后往前一个一个比的

然后我们看i=5的情况,会出现比较次数和移动次数的概念,这里97动了

然后i=8时,49最好放在相同的后面,这样就可以稳定

这个算法会有n-1趟

然后第n趟会有n+1个有序,比如第二趟i=3时会有3个元素有序

这是最坏情况,可以看见第一趟移动和比较都是1次,第二趟2次,第三趟3次

也就是这么多次移动和比较

折半插入排序

理解

前面不是已经是有序的吗,所以用折半多爽啊

直接是从后往前比,而折半是折半查找比,这里查找顺序是65,49,38

题目

d

希尔排序

理解

下面增量d=5

然后每组之间排序 也可以直接竖着写,这样更快

然后是增量为3

然后竖着写,这样更快,结果:

那增量怎么取?

没错,最后一个是增量是d=1就行

这就是传说中的

 链表不太行啊

题目

1

2

我们先看d=3行不行

一会升序一会降序,所以不是3

然后看d=5可以发现每一组都是有序的,而且必须每一组都是有序的,所以一定要竖着写下来

然后根据第一趟看第二趟的就行了

d

交换排序

冒泡排序

理解

怎么去做呢,看好了

49 和 27 比,小的在上,大的在下,很好,过

27 和 13 比,小的在上,大的在下,很好,过

13 和 76 比,小的在下,大的在上,不好,交换!

。。。就这样一直比下去就行,就是1轮

第一轮比较了n-1次,并且13已经确定好了

第二轮比较了n-2次,并且27已经确定好了

。。。

然后会有这个规律

然后注意

最好情况就比较了1次

快速排序

理解

这是规矩

快排的目的是小的放左边,大的放右边

这里6作为枢轴(pivot),从7往左比较

然后比较一下7,没问题,是大于6的,太好了,很舒服,不错,继续保持,加油

然后比较一下4,wait,wait,wait,what the HELLLLL!WAAZZZAAAA!是小于6的

然后会发生很多事情

4先到枢轴上去,6往后找比它大的,找到了9

然后把9放到4那里,9的地方就存储6

然后神奇的事情发生了,6变成了我们想要的样子,左边小于6,右边大于6,6这个位置已经确定了

然后就是算法大师最喜欢的分治法

左右两边都处理是第二趟,左右两边都进行快排

先看左边

,这里4是枢轴,然后从5开始往右

5没事

1有事,小于4,先把1到枢轴,然后枢轴的指针往后移动开始找比它大的数,最后发现与右指针相遇,于是只能把4放到那里

再看右边

这里8是枢轴,然后从7开始往右

7有事,小于8,先把7到枢轴,然后枢轴的指针往后移动开始找比它大的数,发现个9,9到7那里,8插入到里面来

然后不用第三趟了,因为左右两边就1个元素

然后每次会有logn趟,每趟是n

所以时间复杂度Onlogn

最差情况下是有序的情况,时间复杂度达到On^2

比如这里,1要找比它小的,找了n-1次,没找到,向右的指针会到1这里,1确定了,然后枢轴指针往后移动变成2,再来一次,找了n-2次,就这样,当然别固化死了,这里枢轴不一定要是第一个,也可以是中间的4,但说到底只有一个枢轴。

链表还是不行

做题

1

d 不解释 

2

 

 这里是枢轴产生的三种情况,可以注意到d选项,

12如果是第一趟的枢轴,那应该左右两边都有才对,然而并不是左右,这里只有一个32

 

 然后我们看看A选项

这里我们那72当第一趟,那28作为下一趟就合理了

3

这里,最少最少得有2个枢轴,而C选项只有1个9

B选项是9和2是枢轴

c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值