常用排序算法总结。

1.冒泡排序:第一趟气泡排序的结果,使得最大的关键字被安排到最后一个位置,第一趟的结果使得第二大的结果安排到倒数第二个位置。每次都通过比较交换如果前面的比后面的大则交换位置。时间复杂度n的平方。稳定的

2.快速排序:是冒泡排序的一种改进,基本思想是通过一趟排序将待排序的记录分成两部分,其中一部分记录的关键字都比另一部分的关键字小。让后分别对两部分再进行快速排序以达到整个序列有序。因为只有在一趟排序结束时,即low=high的位置才是枢纽的位置。从后面找比枢纽记录小的移到低端。前面找比枢纽大的移到高端。时间复杂度nlogn。不稳定。

3.选择排序:没一趟在n-(i-1)个记录中选取关键字最小的记录作为有序序列的第i个元素。(第i个位置的前面有i-1个元素,第i个元素的后面有n-(i-1)个元素。)时间复杂度:n的平方。

4.堆排序:大顶堆:完全二叉树所有非终端节点的值均不小于其左右孩子的值。

如何构造堆(以大顶堆为例子):将序列看成一个完全二叉树,则最后一个非终端节点是n/2向下取整。所以筛选从这个位置开始。如果该节点不满足值均不小于左右孩子的值,则通过和左右孩子交换来调整满足条件。调整的过程中如果破坏了其他分支的堆结构要继续进行调整。

如何输出堆顶元素后,调整剩余元素成为一个新的堆。

输出堆顶元素,以堆中最后一个元素替代之此时根节点的左右子树均为堆,则仅需自上至下调整即可。(不稳定)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章