绪论
时间复杂度
笔记:
线性表
栈和队列
对于队列再说一点,rear指针可以指向最后一个元素的下一个位置也可以指向最后一个元素,这要根据初始化和入队出队的操作顺序确定。栈也同理
树
图
查找
折半查找的判定树,是一颗平衡二叉树
查找不成功,如果是线性探测,我们要一直往后比较,比较到空,或者是其余的所有元素,才能算查找失败,对于这题来说4个相同的,那么这四个位置的对应的查找长度是5+4+3+2,其余的都是1
那么平均查找长度就是(5+4+3+2+7)/11 = 21/11
排序
插入排序直到最后一次循环结束,才可以确定元素的位置,如果最后一个元素要放在第一个位置,那么所有的元素都不在自己的最终位置上
就算原本的数据有序,那么比较的次数仍然是n趟*n个元素,而交换不用交换了,时间复杂度仍然是O(n^2)
快速排序在普通数据中有最好的数据复杂度,但是排序好的数据中,最差有O(n^2)
规模较小,直接选择快
堆排序没有新开空间,空间复杂度是O(1),快速排序要递归的执行,函数栈的空间复杂度是O
(logn),
快速排序首先进行一次划分,划分后再对左右子表哦进行划分,最终排序完成
归并要新开一个等长的数组O(n)
四个不稳定,希尔,堆排序,快速排序,选择
直接插入排序
希尔排序
保证新增量的子序列有序
桶排序,基数排序
堆排序
这里是O(1)
小根堆:根上的元素比左右孩子都小
大根堆:根上的元素比左右孩子都大
冒泡排序
对于没有优化的冒泡排序来说,每一次这个元素都要和其他所有元素比一遍,因为一次只能确定一个位置的正确,其他的都不一定正确,那么每个元素都有可能是放在首位上的,所有这题就是1…+6。 特别的,可以记录某次循环,如果没有发生交换,可以直接判定冒泡排序完成,这种排序算法,在有序的序列中时间复杂度为O(n)
快速排序
选择排序
每个都要交换,最多交换n-1次