12人加入学习
(0人评价)
算法面试必备数据结构和算法
价格 $9,999美元
该课程属于 2023.7.9 CS课程 请加入后再学习

现在大体框架,子函数可以先用名字代替,最后再写

 

sort:

  • 冒泡,选择,插入 O( n^2)
  • 归并,快速,堆 O(nlogn)
  • 桶,基数,计数,O(n)

 

 

  • 冒泡排序

比较相邻的元素,然后交换,大的后移,对所有的元素移动排序,两个for

优化,如果发现某个元素不用移动,可以提前退出内部for循环,说明已经对他来说已经排完了。但注意 23401这种情况看看

 

  • 选择排序

找最小,放在起始位置,然后后面的在找最小,然后跟第二位置交换,以此类推

 

  • 插入排序

两个序列,扫描未排序序列,然后往前比较,然后插入到对应的有序序列的对应位置,知道所有未排序序列都被扫描

 

  • 希尔排序

不稳定排序,优先比较距离远的元素,然后逐渐缩小增量比较,对于插入排序改进,选择增量序列k,按照k的个数进行k躺排序,每趟排序,根据对应增量,分割成子序列然后分别插入排入。

 

 

Divide and conquar

  • merge sort

把已经排好序的子序列合并。n->n/2和n/2->各自分成两个, 然后分到最小序列,然后一点点合并成最上面,可以用递归算法,但内存消耗比较大,也可以用迭代。分成sort函数和merge函数,在merge时,两个array长度不一定相同,可以用双指针 merge sorted lit,判断一个赋值一个,最后某一个走完之后另一个直接复制到sorted后面

 

  • quick sort

挑出基准量,然后根据这个标准分成左右两边,小在左,大在右,然后不断细分下去,pivot的选择也很重要

 

  • heap sort

类似于二叉树,先创建一个heap,把队首和队尾呼唤,大顶堆和小顶堆,father和child的比较。把heap的尺寸缩小1,然后剩余的元素重新构建大顶堆,然后重复步骤,知道heap的尺寸缩小为1。

 

  • 桶排序 bucket sort

设定一个定量的数组当作空桶,遍历输入数据,并把数据一个一个对应放到桶里,对每个不是空的桶排序,然后从不是空的桶把排好序的数据连接起来。

桶就是一个范围桶,内部进行sort可以merget sort或者其他的也行。  

桶的数量的选择, (max-min)/length+1;

 

  • radix sort 基数排序

适合小范围数

首先取得最大值,并取得位数,然后从最低位开始排序,然后根据10号位拍,然后地推,从最小位开始可以保持每个位数内部的大小关系保持:14》13》12这种在10号位=1的内部,这样就能保持一个稳定的。其实内部的实现也是桶排序,bucket

 

  • 计数排序counting sort

找出max和min,然后统计每一个值为i的元素统计次数,然后存入数组C的第i项。 累加所有的次数(从C中第一个元素开始),反向填充目标数组:将每个元素i放在新数组的第c【i】项,每放一个元素就c[i]-1,类似与从桶中一个一个拿出来连着排放位置。

 

 

heapsort 可以用来找kth 最大或者最小

kth 最值可以quick sort的pivot思路,递归,

one-pass algorithm:只读一次input

sort_color : 4 color, 初始化4个常量。然后发现0,则所有的count+1,因为底部升高,上面全都升高,后面以此类推就可以求次数

H_index?

 

wiggle sort: 找中位数,分成前后两个等长部分,然后穿插安放

Maximum gap: bucket控制至少一个空bucket,这样,bucket内部最大gap=一个bucket长度,但是bucket之间gap却可以》=一个bucket之间

 

[展开全文]
shaning · 2023-10-25 · Session 3 0

授课教师

Yuhan老师

课程特色

视频(9)

学员动态

Shuhao 加入学习
Bianyw 加入学习
shjm 加入学习
YanHuang 加入学习
duoduo99 加入学习