目录
一、冒泡排序
(以从小到大排序顺序为例)---- 时间复杂度:O(n²)
- 相邻两元素两两比较,当左边元素大于右边,则交换位置,否则位置不变,然后右边的元素接着跟下一个元素比较
- 最多遍历(元素数量 - 1)轮,最后一轮没有要交换的元素
冒泡排序的升级—— 鸡尾酒排序法
- 鸡尾酒排序比较和交换的过程是双向的
- 代码的外层大循环控制着所有排序回合,大循环包含了两个小循环,第一个小循环从左到右比较和交换元素,第二个小循环从右到左比较和交换元素
- 优点:特点情况下,减少排序回合数
- 缺点:代码长
二、快速排序
(以从小到大的排序顺序为例)
- 在每一轮挑选一个基准元素,并让其他比它大的元素放在右边,小的放在左边,把数列拆解成两部分,每一部分又分别被拆解成两部分,直到不能拆解为止。
- 可分为单边循环法,双边循环法
- 基准元素的选择:一般都是选择数列的第一个元素
- 平均时间复杂度:O(nlogn),最坏时间复杂度:O(n²)
三、堆排序
分为:大顶推、小顶堆
堆排序算法的步骤:
- 把无序数组构建出二叉堆,需要从小到大排序,则需要构建成最大堆,需要从大到小排序则需要构建成最小堆。
- 循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。(下沉调整)
四、计数排序
计数排序的局限性
- 当数列最大和最小值差距过大时,并不适合用计数排序
- 当数列元素不是整数时,也不适合用计数排序
五、桶排序
需要创建多个桶协助排序,每个桶代表一个区间(里面可以代表一个或多个元素)
- 桶数量 = 元素数量
- 最后一个桶只包含最大值
- 区间跨度 =(最大值 - 最小值)/ 桶的数量 - 1
以下列元素排序为例 3.3 、1.9 、 0.8 、4.5 、0.5
(显然只有第一个桶需要排序)
遍历完所有的桶,输出所有元素:0.5、0.8、1.9、3.3、4.5