承接上篇博客数据结构与算法之初体验(一),本篇博客主要总结一些与数据结构有关的算法知识。
下面是结构图:
导航列表(单击名称跳转到指定算法)
1、简单排序
2、希尔排序
3、快速排序
4、堆排序
5、归并排序
6、基数排序
1、顺序查找
2、二分查找
3、分块查找
【选择排序】
【直接插入排序】
【冒泡排序】
【希尔排序】
【快速排序】
对冒泡排序的一种本质的改进。通过一趟扫视后,使待排序序列的长度能大幅度的减少。在一趟扫视后,使某个结点移到中间的正确位置,并使在它左边序列的结点的键值都比它的小,而它右边序列的结点的键值都不比它的小。称这样一次扫视为“划分”。每次划分使一个长序列变成两个新的较小子序列,对这两个小的子序列分别作同样的划分,直至新的子序列的长度为1使才不再划分。当所有子序列长度都为1时,序列已是排好序的了。
【堆排序】
一种树形选择排序,是对直接选择排序的有效改进。一个堆是这样一棵顺序存储的二叉树,它的所有父结点(e[i])的键值均不小于它的左子结点(e[2*i+1])和右子结点
(e[2*i+2])的键值。初始时,若把待排序序列的n个结点看作是一棵顺序存储的二叉树,调整它们的存储顺序,使之成为一个堆,这时堆的根结点键值是最大者。然后将根结点与堆的最后一个结点交换,并对少了一个结点后的n-1结点重新作调整,使之再次成为堆。这样,在根结点得到结点序列键值次最大值。依次类推,直到只有两个结点的堆,并对它们作交换,最后得到有序的n个结点序列。
【归并排序】
将两个或两个以上的有序子表合并成一个新的有序表。对于两个有序子表合并一个有序表的两路合并排序来说,初始时,把含n个结点的待排序序列看作有n个长度都为1的有序子表所组成,将它们依次两两合并得到长度为2的若干有序子表,再对它们作两两合并……直到得到长度为n的有序表,排序即告完成。
【基数排序】
【顺序查找】
顺序查找就是从表的一端,按顺序比对当前节点与关键字是否相等的一个查找方式。
【二分查找】
要求必须是有序序列,小于中间元素就向左查找,大于中间元素就向右寻找。
【分块查找】
分块查找的过程分两步,先用二分法在索引表中查索引项,确定要查的结点在哪一块。然后,再在相应块内顺序查找。