普通排序方法总结:
1)插入类的排序:在有序的队列情况下,对新数据进行的插入操作。属于这类排序的有:直接插入排序,折半插入排序,希尔排序。直接插入排序,空间复杂度O(1),时间复杂度O(n^2)。希尔排序,又叫缩小增量排序法。以间隔的大小表示增量的大小,随着趟数的增加,减小间隔大小,最终排好顺序。空间复杂度O(1),时间复杂度O(nlogn)。
2)交换类的排序:每一趟排序都通过一系列的交换动作,将某个元素安置到它最终的位置,而插入时不能保证位置会不动,但是交换排序可以确保一趟后,某个元素被放到最终的位置。属于这类排序的有:起泡排序、快速排序。起泡排序,空间复杂度O(1),时间复杂度O(n^2)。
3)选择类排序:每一趟排序中选择一个最大或最小的记录把它与第一个或最后一个数字交换。重在选择。属于这类排序的有简单选择排序、堆排序。
4)归并类的排序:归并就是将两个有序的序列合并成一个有序的序列。二路归并排序。
5)基数类的排序:是基于多关键字排序的思想。把一个关键词拆分成多个关键词。
二叉排序树定义:
二叉排序树或者是空树或者是满足如下条件的二叉树:
1)若左子树不空,左子树的值都小于根的值,
2)若右子树不空,右子树的值都大于根的值
3)左右子树各是二叉排序树。
二叉排序树的查找:根据与根值比较选择左子树还是右子树还是根进行查找。如果找到返回值,如果未找到即找到NULL,则返回查找失败。
二叉排序树的插入:若该值不存在于该二叉树,则查找二叉树失败的位置即为该值的插入位置。所以说插入操作时配合着查找执行的,当查找成功,则插入失败,当查找不成功,则插入成功。
说明:二叉排序树的插入均存储于新创建的叶子结点。
二叉排序树的构造:只需要建立一颗空树,然后将关键字依次插入到空树中,即可构造一颗二叉排序树。
二叉排序树的删除:1)二叉树的删除不能直接删除带有左子树或者右子树的结点,可以直接删除在叶子位置的结点。
根据二叉排序树的性质,该处于根结点的需要大于左子树的所有值,小于右子树的所有值。
2)如果只有右子树,则应该选择的替换结点是右子树的最左端结点,如果该节点是左叶子,则直接替换,如果其节点含有右子树,而将右子树直接作为替换点的根节点的左子树。如果只有左子树,则应该选择的是左子树的最右端结点进行替换,如果其节点含有左子树,而将左子树直接作为替换点的根节点的右子树。
3)如果该节点既有左子树又有右子树,任意选择左右子树,如果是左子树,则找左子树的最右端结点,根据前面的办法进行相应操作。如果选择右子树,则找右子树的最左端结点,按照2)的情形进行删除操作。
平衡二叉树 又称为AVL树,是一种特殊的二叉排序树,其左右子树都是平衡二叉树。且左右子树高度之差的绝对值不能超过1.
关于平衡二叉树的调整构造时,要时刻记住寻找造成不平衡的最小子树,也就是离刚插入节点最小不平衡树,根据中间值作为根进行调整。平衡二叉树能保证构建的查找速度较优,但是对插入删除的操作费时费力。
红黑树:是在二叉排序树下进行性质约束。使得最长路径不会超过最短路径的2倍。并且正常情况下插入删除操作简便,使得红黑树较为广泛使用,它可以保证在最坏的情况下,查找效率为logn,如何保证n个节点的树的高度始终保持在logn,需要满足以下几个性质。
红黑树的性质:
性质1.每个节点要么是红色,要么是黑色
性质2.根节点永远是黑色的
性质3.所有的叶节点都是空节点(即null),并且都是黑色的。
性质4.每个红色节点的两个子节点都是黑色。从每个叶子到根的路径上不会有两个连续的红色节点。
性质5.从任一节点到其子树中的每个叶子结点的路径都包含相同数量的黑色节点。
常用的算法题
串匹配–KMP算法
算法思想:根据模式串的匹配情况,不回退主串进程,而只是将模式串滑动到一定距离,继续进行匹配。公式为当第j位模式串不匹配时,需要将模式串滑动到第k位与当前主串不匹配的位置进行匹配。next[j]=k。如果k为0,即主串向后移,因为没有模式串位置能够匹配当前位置,所以主串往后移动一位与模式串的第一位进行匹配。公式推导都是根据模式串得出。
公式:
参考链接: