上次的二叉树,咱们剩一点点没讲,今天讲掉:
赫夫曼树
赫夫曼(Huffman)树,又称最优树,是带权路径长度最短的树
1) 每次取出最小的两个数,小的放左边
2) 刚才的两个小的值相加,求出和,然再剩下的(包括刚才的和)中再取出两个小的,
3) 依次类推
可以理解为这是一个赫夫曼树(哈夫曼树)ps:音译问题不要在意
树那部分我要讲的就这么多,然后咱们讲讲排序
排序可以分为稳定排序和不稳定排序
稳定排序
如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定排序
如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
常见的那些排序的分类:
属于稳定排序的是:冒泡排序,插入排序(它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入),交换排序
属于不稳定排序的是:选择排序 (每轮 从头到尾 扫描,选出最小的,放在前面, 此种排序叫选择排序),快速排序(每次从前面拿出第一个数,开始排序,经过1轮 左面都比其小,右面的都比其大)
快速排序: 采用的是插空的方式,移动数据少(所以效率更高)
顺便说一下,快排和冒泡日常用的很多,不清楚自己去找详细的程序去记住,网上一堆
影响排序效率的因素有哪些?
1) 移动的次数 (影响的大一些) 2) 比较的次数
插入排序如何减少比较次数?
二分法找到位置(折半插入排序)
插入排序如何减少移动次数?
链表插入排序