---页首---
摘要: 希尔排序(升序为例) 希尔排序的思想:将序列看成一个矩阵,根据一个步长序列将原序列分成m个列,逐列进行排序,直到列数变为1列为止 因此希尔排序的时间复杂度与步长关系密切。 希尔本人给出的步长序列为: n / (2^k),其中n为序列元素的个数,k = 1,取整数 举例: 序列元素有32个,那步长序列 阅读全文
posted @ 2020-04-17 21:22 20190311 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 归并排序(升序为例) 思路: + 1. 将当前序列平均分割成2q个子序列,直到不能再分割(即序列中只剩下1个元素) + 2. 再不断的将2个子序列合并成一个有序序列,直到最终合成1个序列 \ 最好、最坏、平均时间复杂度:O(nlogn),因为每次分割都是平分 \ 空间复杂度: O(n) \ 稳定性: 阅读全文
posted @ 2020-04-17 20:04 20190311 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 插入排序(升序排序为例) 思路: + 1. 将序列分为两个部分,头部已经排好的和后面待排序的 + 2. 从头部开始遍历每一个元素,然后插入头部已排好序的恰当位置 Swift class InsertionSort { var array = [5, 7, 2, 8, 9, 4, 7, 3, 2] / 阅读全文
posted @ 2020-04-17 17:41 20190311 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 快速排序(选择升序排序) 思路 + 1. 从序列中选择一个枢轴(支点,pivot),假设每次选择索引0位置为支点 + 2. 利用支点将序列分割成两个子队列 小于支点的放在支点的左侧 大于支点的放在支点的右侧 等于支点的左右都可以(这里相等放右边) + 3. 对子序列进行1,2操作,直到不能再分割(也 阅读全文
posted @ 2020-04-17 15:54 20190311 阅读(118) 评论(0) 推荐(0) 编辑
---页脚---