特别声明:原文来自公众号:帅地玩编程,原文链接https://mp.weixin.qq.com/s/AGPCfFg7bEiCsa5zNeCi4A
术语铺垫
有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:
1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。
2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。
3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。
4、非原地排序:需要利用额外的数组来辅助排序。
5、时间复杂度:一个算法执行所消耗的时间。
6、空间复杂度:运行完一个算法所需的内存大小。
十大排序讲解顺序
- 选择排序
- 插入排序
- 冒泡排序
- 非优化版本
- 优化版本
- 希尔排序
- 归并排序
- 递归式归并排序
- 非递归式归并排序
- 快速排序
- 堆排序
- 基数排序
- 非优化版本
- 优化版本
- 桶排序
- 基数排序
1、选择排序
过程简单描述:
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序。
核心:选择排序的关键点在于:每次筛选出剩余数组中的最小数,将它与剩余数组的第一个进行位置交换