十大经典排序算法简介
0、算法概述
0.1 算法分类
十种常见排序算法可以分为两大类:
-
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
-
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
0.2 算法复杂度
0.3 相关概念
-
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
-
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
-
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
-
空间复杂度:是指算法在计算机
内执行时所需存储空间的度量,它也是数据规模n的函数。
快速排序的核心思想是先设定一个标杆值,然后分别从无序序列的前、后进行双向遍历,从后往前是寻找比标杆值小的值,从前往后是寻找比标杆值大的值,然后调整这两个值和标杆值的位置,确保标杆值左侧的都是比它小的值,而其右侧都是比它大的值。然后下一轮递归——以标杆值作为分界,其左侧和右侧分别再重复上述过程。
效果图
第一轮,无递归
点击绿旗随机初始化小猫的颜色,然后点击 “舞台” 对颜色进行快速排序,我这里设置的颜色规则是 红>蓝>绿>黄。最上方的小猫是用于存储标杆值的小猫。从后往前找的过程中该小猫会跳起(上移),从前往后找,会将该小猫往下移动。待插入的小猫会保持上移(或下移)状态一段时间,这样可以更直观的看出是哪两只小猫在进行替换(同时还搭配了不同的音效),以及具体发生交换的位置在哪里。
合并所有序列,即有递归的过程