比较的排序算法的执行过程,会涉及两种操作,一是元素比较大小,另一种是元素交换或移动。
原地排序(Sorted in place)算法,是特指空间复杂度是 **O(1)**的排序算法。
双循环排序 O(n2)
适合小数据量排序
分组排序 O(nlogn) 用到了分治**,适合大数据量排序
归并排序是由下到上的,先处理子问题,然后再合并,归关排序虽然是稳定的排序,但不是原地排序算法。
快速排序是相反的,处理过程是由上到下的,先分区,然后再处理子问题。
下面三种都是叫,线性排序,之所以叫做线性的时间复杂度,主要是下面三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作,但是对排序数据的要求很苛刻。
其它偏排序
猴子排序 睡眠排序 面条排序
如何分析一个"排序算法"的好坏?
- 排序算法的执行效率
- 最好情况,最坏情况,平均情况时间复杂度
- 时间复杂度的系数、常数、低阶
- 比较次数和交换(或移动)次数
-
排算算法的内存消耗 算法的内存消耗可以通过空间复杂度来衡量,原地排序,是特指空间复杂度是 O(1) 的排序算法。
-
排序算法的稳定性 稳定性是指,如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。
共同点在于,都是通过一个多次的重复的操作计算出最终的结果。
- 遍历,依次对集合中的每个元素做且公做一次访问
- 递归,不断通过自身调用去缩小范围b,直到找到或尽头返回。使用调用自身函数来触发。
- 迭代,是执行很多次,每次都运行上一次的结果,来向目标推进一点,直到找到结果。使用
while
,for
循环条件来运行。
递归算法复杂度,要根据递归的关系来算出来。
- 十大经典排序算法(动图演示)
- 大O 复杂度速查
- js实现排序算法(冒泡、选择、插入、二分插入、快速、希尔)
- * 算法的时间和空间复杂度,就是这么简单
- * 前端该如何准备数据结构和算法?
- * 算法动态图
广义定义: 数据结构就 是指一组数据的存储结构。 算法就是操作数据的一组方法。
狭义 是指队列,栈,堆,二分查找,动态规划等。
数据结构和算法是相辅相成的,数据结构是为算法服务的,算法要作用在特定的数据结构之上。