算法特性
-
时间复杂度与空间复杂度
-
时间复杂度是指程序运行从开始到街上所需要的时间。
-
空间复杂度是指对一个算法在运行过程中临时占用存储空间大小的度量。
-
常见的对算法所需时间的度量:
-
o(1)<o(log2n)<o(n)<o(nlog2n)<0(n的2次方)<o(n的三次方)<o(2的n次方)
顺序查找
-
顺序查找的思想:将待查找的关键字为key的元素从头到尾与表中元素进行比较,
-
如果中间存在关键字为key的元素,则返回成功;否则则查找失败
-
n+1/2, 时间复杂度o(n)
二分查找
-
二分查找的基本思想是前提是区间有序的,确定该区间的中点位置,将待查的k值与中点位置比较,若相等,则查找成功并返回此位置,否则需要确定新的查找区间,继续二分查找
-
折半查找关键字比较次数最多为 log2n + 1
-
折版查找时间的复杂度为o(log2n)
散列表
类似Hash
排序
插入排序
-
希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组
-
所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序
-
然后取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt-1,即所有记录放在同一个组中进行直接插入排序为止
-
d1=n/2=5 57 68 59 52 72 28 96 33 24 19
-
d2=d1/2=3 28 68 33 24 19 57 96 59 52 72
-
d3=d2/2=1 24 19 33 28 59 52 72 68 57 96
-
19 24 28 33 52 57 59 68 72 96
-
直接选择排序
-
直接选择排序的过程是,首先在所有记录中选出排序码最小的记录,把它与第一个记录交换,
-
然后在其余的记录内选出排序码最小的记录,与第二个记录交换....依次类推,直到所有记录排完为止。
堆排序
堆的概念
- 小顶堆:父子节点小于叶子节点
- 大顶堆:父子节点大于叶子节点
交换排序
-
冒泡排序的基本思想是,相邻元素之间的比较和交换,讲排序码较小的元素逐渐从底部移向顶部
-
由于整个排序的过程就像水底下的气泡一样逐渐向上冒,因此称为冒泡算法
-
快速排序采用的分治法,其基本思想是将原问题分解成若干个规模更小但结构与原问题相似的子问题。通过递归地解决这些子问题,然后再将这些子问题的解组合成原问题的解。
归并排序
-
归并也称为合并,是将两个或两个以上的有序子表合并成一个新的有序表
基数排序
-
基数排序是一种借助多关键字排序思想对单逻辑关键字进行排序的方法
-
基数排序不是基于关键字比较的排序方法。它适合于元素很多而关键字较少的序列