004 排序(冒泡&快排)

1、冒泡排序(Bubble Sort)

冒泡排序是一种交换排序。
基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

① 算法实现
  • 嵌套循环。i=0j从后往前循环,逐个与前一个值作比较,将较小值交换到前面,直到找到最小值放在了第1的位置,接着继续下一轮循环(i += 1
  • 若某次循环(i)中已无数据交换,则不需要继续下轮循环:
    设置flag。若flag=True,则说明前一轮循环中仍有数据交换,则继续下一轮循环;若flag=False,则说明前一轮循环已无数据交换,可以跳出大循环。

004 排序(冒泡&快排)

② 复杂度

当最好的情况,也就是要排序的序列本身就是有序的,根据优化过的算法可推断出是n-1次的比较;
当最坏的情况,即待排序列是逆序的情况,则为1+2+3+...+(n-1) = n(n-1)/2 次的比较。
则总的时间复杂度为 O(n2)

2、快速排序(Quick Sort)

基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。

① 算法实现

QuickCore函数,其实就是将选取的pivotkey不断交换,将比它小的换到它的左边,比它大的换到它的右边,它也在交换中不断更改自己的位置,直到完全满足这个要求为止。

004 排序(冒泡&快排)

② 复杂度

O(nlogn)