0
点赞
收藏
分享

微信扫一扫

排序总结 链表

WikongGuan 2023-09-09 阅读 45

排序总结











时间复杂度

空间复杂度

是否能有稳定性

选择

O(N*N)

O(1)

×

冒泡

O(N*N)

O(1)

✔️

插入

O(N*N)

O(1)

✔️

归并

O(N*logN)

O(N)

✔️

快排(一般指3.0)

O(N*logN)

O(N*logN)

×

O(N*logN)

O(1)

×

基数排序作为不基于比较的排序,有稳定性

基础类型的排序一般排序用快排,因为其时间复杂度常数项更小,需要保持稳定定用归并,不想占用额外空间用堆排序

非基础类型的排序可以用归并,因为有稳定性

希尔排序:多轮插入排序

排序优化:

样本N较大时,先用快排划分为一个个N较小的样本,在小样本上使用插入排序(插入排序时间复杂度常数项极低)

哈希表查找 O(1)   有序表查找 O(logN)

笔试:不需要考虑空间复杂度

面试:空间复杂度尽量小

链表

基础题:

反转单向链表和双向链表  打印两链表公共部分

判断回文链表

笔试做法:快慢指针找到链表中间(链表长度为奇数/偶数 code不一样),栈

面试做法:快慢指针找到链表中间,右半部分链表反转,判断回文,恢复链表

将单向链表按某值划分成左边小,中间相等,右边大的形式

笔试做法:每个节点放在数组里,数组做partition,把节点串起来

面试做法:六个变量,小于/等于/大于区域的头/尾,最后连起来(要注意三个区域是否为空)

复制链表,链表节点除有next指针外,还有一个rand指针,随机指向链表某个节点或为空

笔试做法:哈希表(key:老节点 value:新节点)

面试节点:把新节点串在老节点后面(再后面是下一个新节点),省掉哈希表

举报

相关推荐

0 条评论