其他分享
首页 > 其他分享> > 选择排序&归并排序&基数排序

选择排序&归并排序&基数排序

作者:互联网

---

Selection Sort

”选择排序 “

”每一趟将待排序的最小元素(或最大元素)加入有序子序列 “

image-20210701211159456

简单选择排序

算法实现

image-20210701211303931

性能分析

image-20210701211502921

image-20210701211542088

Heap Sort

”堆排序 “

在回顾一下6.006中对与的定义,

image-20210701212442203

结合之前学到的二叉树的顺序存储就不难理解了

”堆是一个顺序存储的完全二叉树“

image-20210701212542234

image-20210701212840867

了解了大根堆和小根堆的定义后,再回来看选择排序的核心思路:

”每一趟将待排序的最小元素(或最大元素)加入有序子序列 “

显然,如果我们已经拥有了一个大根堆/小根堆,上述的选择操作自然就变得十分简单,无非是取根结点的元素罢了,那么如何构造大根堆/小根堆呢?

Build a Max_heap

image-20210702133041886

代码解释

image-20210702135741346

基于大根堆进行排序

既然已经知道了如何构造大根堆,那么利用它进行排序就十分简单了:

重复上述步骤直至元素有序

image-20210702142559166

性能分析

关键在于 “下坠 ”过程,即分析 HeadAdjust函数:

image-20210702143444225

image-20210702144143909

link:https://www.cnblogs.com/potofsalt/p/14773949.html#heap_sort

“堆排序不具有稳定性 ”

image-20210702144418579

小结

image-20210702144518422

堆的插入删除

插入新结点

”Now I‘m rising “

image-20210702145722593

image-20210702150828027

删除一个结点

”when i was drowning“

image-20210702145627496

”考试有时会考关键字的比较次数

image-20210702145915025

image-20210702150001857

image-20210702150325821

image-20210702151302154

Merge Sort

”归并排序 ”

”与前述的交换、选择等排序思想不一样,归并的含义是将两个或两个以上的有序表组合成一个新的有序表 “

二路归并:将两个有序表合并为一个新的有序表

image-20210702160934543

image-20210702161305716

“内部排序中一般采用二路归并 ”

image-20210702161513491

算法实现

“归并 ”

image-20210702162308854

“归并排序 ”

image-20210702163144916

性能分析

image-20210702165123913

image-20210702164830016

小结

image-20210702165448226

Radix Sort

“基数排序 ”

image-20210702185330099

“要求能够手动模拟排序过程 ”

image-20210702190216624

image-20210702190415498

性能分析

image-20210702191006198

image-20210702191505129

收集 Q[i]上的所有元素的时间复杂度为O(1),因为只需将Q[i]的 front指针赋给表尾指针 p的 next即可 “

image-20210702192035136

image-20210702192346873

Application

image-20210702192601563

image-20210702193039134

image-20210702193243688

小结

image-20210702193723205

标签:大根堆,归并,元素,结点,根堆,基数排序,排序
来源: https://www.cnblogs.com/potofsalt/p/14964663.html