冒泡排序将被排序的记录数组R[1…n]垂直排列,每个记录R[i]看成是重量为ki的气泡。
根据轻气 泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"飘 浮".如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
冒泡排序的具体过程如下。
第一步,先比较k1和k2,若k1>k2,则交换k1和k2所在的记录,否则不交换。继续对k2和k3重复上 述过程,直到处理完kn-1和kn.这时最大的排序码记录转到了最后位置,称第一次起泡。共执行n–1 次比较。
第二步与第一步类似,从k1和k2开始比较,到kn-2和kn-1为止,共执行n–2次比较。称第二次起泡。
依此类推,共进行n–1次起泡,完成整个排序过程。 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数为n–1次,记录移动次数为0.因此,冒泡排序最好的时间复杂度为O(n)。
若初始文件是反序的,需要进行n–1趟排序。每趟排序要进行n–i次关键字的比较(1≤i≤n- 1),且每次比较都必须移动记录3次来达到交换记录位置的目的。
在这种情况下,比较次数达到最大值
n(n–1)/2=O(n2),移动次数也达到最大值
3n(n–1)/2=O(n2)。
因此,冒泡排序的最坏时间复杂度为O(n2)。 虽然冒泡排序不一定要进行n–1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入 排序要差得多。冒泡排序是就地排序,且它是稳定的。
冒泡排序
最新推荐文章于 2020-12-09 21:29:10 发布