快速排序、冒泡排序 (交换类排序)讲解

本文结合天勤数据结构书加上个人理解总结而来,希望能给不熟悉本文中概念的同仁带来一些帮助,如有不恰当的地方,欢迎纠正。

快速排序

每一趟排序选择当前序列中的第一个关键字(通常是第一个)作为枢纽,而快速排序要做的就是把比枢纽小的关键字交换到枢纽前面,比枢纽大的关键字交换到枢纽后面。本趟排序完后会生成新的子序列,而子序列会成为下一趟排序的初始序列。(通过例子来讲明快速排序的规则)
在这里插入图片描述
在这里插入图片描述
总结而言就是:首为枢纽,左i右j,先j后i,j从右向左,找小的,i从左向右,找大的。
快速排序时间复杂度最好为o(n),最坏为o(n2 ),平均时间复杂度为o(n2 )。
快速排序空间复杂度为o(1)。

冒泡排序(起泡排序)

对原始序列进行排序,第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不交换;第二个关键字和第三个关键字比较,如果第二个大,则二者交换,否则不交换……(依次类推交换下去),最后最大的关键字被交换到了最后面。这是第一趟排序,经过多趟这样的排序,整个序列就会变成从小到大的有序序列,升序。(或者采用把最小的关键字换到最后的方法,这样最后就会变成从大到小的有序序列,降序)。

冒泡排序算法结束的条件是在一趟排序中没有发生关键字的交换。