选择排序
基本思想:每一趟从待排序的元素中选出最小的元素,顺序放在已排好序的子表的最后,直到全部元素排序完成。
适用于从大量的元素中选择一部分排序元素,例如从10000个元素中选择出关键字大小为前10位的元素
堆排序(树形选择排序)
最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点。
Hash函数的构造方法
目标:使所有元素的哈希地址尽可能均匀地分布在m个连续内存单元上
1.直接定址法
2.除留余数法
最经常使用的一种哈希函数
3.数字分析法
hash冲突的解决方法:
装填因子:指哈希表中已存入的元素数n与哈希地址空间大小m的比值,即a=n/m。
装填因子越小,冲突的可能性就越小
开放定址法:
1.线性探测法
容易产生堆积问题。
2.平方探测法
可以避免出现堆积问题
缺点:
不一定能探测到哈希表上的所有单元,但最少能探测到一半单元。
拉链法:
所有哈希地址为i元素对应的结点构成一个单链表。在这种方法中,哈希表中每个单元中存放的不再是元素本身,而是相应同义词单链表的首结点指针。
优点:
处理冲突简单,且无堆积现象。
由于拉链法中各单链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况。
缺点:指针需要额外的空间。
拓扑排序的方法
1.从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它
2.从图中删除该顶点,并且删去从该顶点发出的全部有向边
3.重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。
结果有两种:
1.图中全部结点都被输出,即该图中所有顶点都在其拓扑序列中,这说明图中不存在回路。
2.图中顶点未被全部输出,这说明图中存在回路。
所以可以通过对一个有向图进行拓扑排序,看是否产生全部顶点的拓扑排序序列来确定该图中是否存在回路