算法学习-排序
Contents
简单排序
1.冒泡排序
原理: 对给定的数组进行多次遍历,每次比较相邻的两个数,如果前一个比后一个大,则交换
|
|
2.选择排序
原理: 对给定的数组多次遍历,每次找出最大值的索引
|
|
3.插入排序
原理: 从第二个数开始向右遍历,每次将该位置的元素向左移动,放置合适的位置
|
|
高级排序
1.希尔排序
原理:
- 选定一个增量h,按照增长量h作为数据分组的依据
- 对分好组的每一组数据完成插入排序
- 减少增长量,最小减为1,重复第二步操作
|
|
2.归并排序
原理: 给定一组数组,首先将每个相邻的长度为1的子序列进行归并,得到n/2个长度的为2或1的有序子序列;再将其两两归并,反复执行,直到得到一个有序序列为止。
|
|
3.快速排序
原理:
- 在集合中,选择一个元素为‘基准’(pivot)
- 将所有小于基准的元素都移到基准左边;大于基准的元素移到基准右边
- 对基准左右两边的子集,不断重复第一步和第二步,直到所有子集只剩下一个子集为止
|
|
备注:
- 假设要求排序都是从小到大排序
- 为了写单元测试,函数都写了返回参数
性能
排序方法 | 最好时间 | 平均时间 | 最坏时间 | 辅助存储 |
---|---|---|---|---|
冒泡排序 | O(n) | O(n^2) | O(n^2) | O(1) |
选择排序 | O(n) | O(n^2) | O(n^2) | O(1) |
插入排序 | O(n) | O(n^2) | O(n^2) | O(1) |
希尔排序 | O(n) | O(nlogn) | O(ns) 1<s<2 | O(1) |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) |
快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) |
Author zhuyhan
LastMod 2020-04-13