交换即根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。
本次主要介绍冒泡排序和快速排序。
一、冒泡排序
(1)冒泡排序的基本思想如下:
(2)示例如下:(按照从小到大(升序)排序)
从第一个开始,两个比较,若第一个比第二个小,就交换次序,否则不交换。
(3)算法代码:
(4)冒泡排序的性能分析:
空间复杂度为O(1),只使用了常熟个辅助单元。
时间复杂度:
最好情况下,初始序列有序时,比较次数为n-1,移动次数为0,最好情况下的时间复杂度为O(n)。
最坏情况下,初始序列为逆序时,需要进行n-1趟排序,第i趟排序要进行n-i次关键字的比较,每次比较后都必须要移动3次来交换元素位置,此时:
最坏时间复杂度为O(n^2)。
平均时间复杂度为O(n^2)。
冒泡排序是一种稳定的排序算法。
适用于顺序存储和链式存储的线性表。
冒泡排序所产生的有序子序列一定是全局有序的,(不同于直接插入排序(局部有序))。每一趟冒泡排序都会将一个元素放到其最终位置上。直接插入排序不一定。
二、快速排序
(1)基本思想
(2)示例如下
(3)算法代码
使用一个划分函数,然后使用递归算法。
(4)性能分析
空间复杂度:需要使用递归工作栈保存每层递归所必要的信息。最好情况下为O(log n),最坏情况下,需要n-1次调用,栈的深度为O(n)。平均情况下,O(log n)。
时间复杂度:
最坏情况下为O(n^2),最好情况下,O(nlog n)。
快速排序是一种不稳定的排序算法。
快速排序是所有内部排序算法中平均性能最优的排序算法。
注:log 以2为底。