「数据结构」八大排序(超详解 附动图 源码)(5)
2023-04-24 来源:飞速影视
注意:
在进行最小值和最大值同时交换时也会出现一个问题,
如果最大值在起始位置的时候,交换了最小值之后,最大值就被交换到了min的位置,
如果继续交换max,就会将最小值交换到末尾位置。
![「数据结构」八大排序(超详解 附动图 源码)](http://fs.qqfile.top/re/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC9iM2I3ZDBhMjBjZjQzMWFkYzYzZjRjN2FmZTA2ZGFhNjJmZGQ5OGI5LnBuZ0BmX2F1dG8_dG9rZW49NGFiMDM4NjZmNGJkOGU5MWRhYmM0NDE4NTM5ODk4NGQ1)
所以,在每次交换了最小值之后应该判断一下最大值是否在起始位置,如果在需要将max赋值为min。
![「数据结构」八大排序(超详解 附动图 源码)](/images/loading.gif)
直接选择排序的特性总结:
直接选择排序思考非常好理解,但是效率不是很好(不论数组是否有序都会执行原步骤)。实际中很少使用 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定
4.堆排序
堆排序即利用堆的思想来进行排序,总共分为两个步骤:
1. 建堆
升序:建大堆 降序:建小堆
2. 利用堆删除思想来进行排序
建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。
这里以升序为例:
首先应该建一个大堆,不能直接使用堆来实现。可以将需要排序的数组看作是一个堆,但需要将数组结构变成堆。 我们可以从堆从下往上的第二行最右边开始依次向下调整直到调整到堆顶,这样就可以将数组调整成一个堆,且如果建立的是大堆,堆顶元素为最大值。 然后按照堆删的思想将堆顶和堆底的数据交换,但不同的是这里不删除最后一个元素。 这样最大元素就在最后一个位置,然后从堆顶向下调整到倒数第二个元素,这样次大的元素就在堆顶,重复上述步骤直到只剩堆顶时停止。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号