****** 五 ******、软设笔记【数据结构】-交换排序、归并排序

四、交换排序
交换排序的基本思想是两两比较待排序记录的关键码,如果发生逆序(排序顺序与排序后的次序相反),则交换之,直到所有记录都排好序为止。
交换排序的主要算法有:
1)冒泡排序
2)快速排序


(1)冒泡排序
基本思路:每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。
*第一趟:第一个与第二个比较,大则交换;第二个与第三个比较,大则交换,......关键字最大的记录交换到最后一个位置上;
*第二趟:对前n-1个记录进行同样的操作,关键字次大的记录交换到第n-1个位置上;
*依次类推,则完成排序


最好情况:初始排序已经有序,只执行一趟起泡,做n-1次关键码比较,不移动对象。
最坏情形:初始排列逆序,要执行n-1趟起泡。


*时间效率:O(n2) 因为要考虑最坏情况
*空间效率:O(1) 只在交换时用到一个缓冲单元
*稳定性:稳定,因为25和25*在排序前后的次序未改变


(2)快速排序
从待排序列中任取一个元素(例如取第一个)作为中心,所有比它小(或相等)的元素一律放前,所有比它大的元素一律放后,形成左右两个子表;
然后再对各子表重新选择中心元素并按此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。
*优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快!
*前提:顺序存储结构


若待排记录的初始状态为按关键字有序时,快速排序将锐化为冒泡排序,最坏时间复杂度为O(n2),最好的时间复杂度为O(nlog2n)
快速排序是一种不稳定的排序方法


五、归并排序
可以把一个长度为n的无序序列看成是n个长度为1的有序子序列,首先做两两归并,得到n/2个长度为2的有序子序列;再做两两归并,....,如此重复,直到最后得到一个长度为n的有序序列。


*时间效率:O(nlog2n)
*空间效率:O(n)
*稳定性:稳定

猜你喜欢

转载自blog.csdn.net/qq_40223688/article/details/80284733