【C# 排序】开篇
概览
算法的思想
- 穷举(枚举)算法思想;
- 递推算法思想;
- 递归算法思想:
- 分治算法思想:
- 概率算法思想;
算法分类
按辅助空间分类
比较式排序法
比较排序法不需要太多的辅助空间
之前学习的冒泡、选择、插入、归并、快速、希尔、堆排序,都是基于比较的排序口平均时间复杂度目前最低是o(nlogn)
分配式排序法
需要比较大的辅助空间
计数排序、桶排序、基数排序,都不是基于比较的排序
它们是典型的用空间换时间,在某些时候,平均时间复杂度可以比 o(nlogn)更低
按存储位置分类
内排序:数据都在内存中,关注算法的时间空间复杂度
外排序:数据太多,无法全部放入内存,关注算法的时间空间复杂度,还要关注使读写磁盘的次数更少。内存读取磁盘100MB/s
Out-place(外排序)
如果开辟的辅助空间与问题规模有关,则是out-place。
归并排序法:需要开辟一个和原数组一样大的数组。
基数排序法:需要开篇一个多个分类目录来帮助分类。
桶排序法:同上
计数排序法法:同上
in-place(内排序)
在冒泡排序中,为了将arr排序,借用了一个temp的临时变量,开辟了一个临时空间,这个空间是常数量,这就是。
算法的思想
- 穷举(枚举)算法思想;
- 递推算法思想;
- 递归算法思想:归并、快速排序
- 分治算法思想:合并排序、二分法查找、堆排序、快速排序
- 概率算法思想;
排序指标
算法的稳定性:若待排序表中有两个元素R;和R;,其对应的关键字相同即keyi =keyj,且在排序前Ri仍然在Rj的前面,若使用某一排序算法排序后,Ri仍然在Rj的前面,则称这个排序算法是稳定的,否则称排序算法是不稳定的。
稳定性定义:稳定性是指样本在排序之后不会改变相对顺序。
对于基础类型来说,稳定性毫无意义
对非基础类型来说,稳定性有重要意义
学习工具
https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
排序法
插入排序法
编程是个人爱好