C++排序
- 最好的排序就是std::sort()
如果你非要某一种具体排序,时间复杂度没法卡,因为输入就是ON了
链表提供一个成员函数来排序,而且参数为空;链表排序的两个之间不会交换,还有一个好处在于稳定排序 标准库提供stablesort
- 稳定排序Stable sort
- 和效率没关系,说的不是效率稳定
- 比方说整数序列带颜色,红色的3在蓝色3前面,排序后依然在前面。
- 相同关键字的元素位置排序后位置相对不变
- 归并排序是,基数排序,箱子排序也是。快速排序不是
- 箱子排序bin-sort
- 依赖于forward-list来实现,总是队首删除,队首插入
- 依赖于链表的不断从头到尾的删除和插入另一个,最后是从末尾开始插入总的排序结果
- 适用于range比较小的情况,这样才能放下足够的箱子
- 要重载输出和不等于运算符 判断是不是这个箱子属于,要重载类型转换到int的函数,用来比较
- 基数排序
- 比较高级一点的箱子排序,适用于n比较大的情况
分解方法:由低到高,为什么100会有后面的小数点呢?因为100只是箱子·范围,不是数的范围
- 桶排序
- 比较高级一点的箱子排序,适用于n比较大的情况
- 冒泡排序Bubble sort
- 思想
- 思想
- 快速排序quicksort
- 分治策略,减少比较次数
- 如何选择基准元素,初始是啊a[0]
- 如何建立分区Partition算法 利用左右指针扫描得到两个元素交换位置
- 快速排序的改进
- 分治策略,减少比较次数
- 选择排序之堆排序
- 直接选择排序 堆排序首先要从上到下,从左到右构建完全二叉
构造完成后从第一个飞叶子节点开始比较它和孩子叶子的大小,假设是升序用大根堆排序,比它大的孩子交换位置。然后是下一个非叶子节点
- 堆顶元素就是最大值,最大值交换之前序列的最末尾元素,然后用剩下的元素继续构造大根堆
- 性能分析
- 直接选择排序 堆排序首先要从上到下,从左到右构建完全二叉
- 直接插入排序之希尔排序
- 算法思想
- 性能
- 希尔排序——分组插入排序
- 思想
- 性能
- 归并排序
- 分治思想
-
-
- 排序结论
- 效率