1.插入排序
核心思想:从前向后对每个数和它之前的数字相比较,并把他放在合适的位置
2.拓扑排序
有向图排序,核心思想:
(1)深度遍历:遇到死端往回走,出盏顺序即为拓扑排序
(2)减一法:减去一个源端点即没有指向他的点,只有他指向别的端点,删除该端点,和他的线
3.生成排列(自底向上)
核心思想:从下至上1*C(2,1)*C(3,1)*...C(N,1)种
算法:Johnson:初始化1,2,3...n的队列,移动方向均向左。while存在移动元素do找到最大移动元素,交换最大移动元素和他移动所指向的元素,并且调整数值大于最大移动元素的元素的方向并生成新排列
移动元素:大的指向小的,该元素即可移动
4.生成子集(自底向上)
第n排 1 + C(N,1) + C(N,2) + C(N,3) +... + C(N,N) = POW(2,N)[包含空集]
减治思想的体现:A{a1,a2,...an} = 把an添加到{a1,a2,...,an-1}集合构成的所有子集
二进制格雷反射码:核心思想:如果n = 1,则L1 = {0,1} 否则执行:循环调用参数n-1得到L1,L2, = 反向L1,L1每个元素前+0,L2每个元素前+1,L1和L2拼接为L,返回L
5.折半查找
核心思想:已经排好序的list,while start < end :(start + end)/2和参数比,如果相等,则break,如果参数小,end = (start + end)/2,否则 start = (start + end)/2
6.假币问题
核心思想:同折半查找,对半分,轻的包含假币
7.俄式乘法
核心思想:A B相乘,不断将A/2,B*2,如果A为奇数,A/2向下取整,B = B * 2 (A),直到A等于1,最后将B + A1,A2,A3...
8.约瑟夫斯问题
核心思想:1~n成圈排列,第一个杀死第二个,直到剩下最后一个,最后一个存活的位置(2k+1/2k为圈内总人数)
奇数:J(2K+1) = 2*J(K)- 1
偶数:J(2K) = 2*J(K) - 1
9.lamuto划分
核心思想:类似于快速排序,选择第一个作为基准,小的交换到前面,大的交换到后面,遍历完成后,将该基准元素和小的最后一个做交换
10.快速选择
核心思想:递归调用不断进行lamuto划分,直到找到第k小的元素
11.插值查找
核心思想:已知是有序数组,故可以按照比例来进行计算,线性函数
12.