004 排序(冒泡&快排)
1、冒泡排序(Bubble Sort)
冒泡排序是一种交换排序。
基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
① 算法实现
- 嵌套循环。
i=0
,j
从后往前循环,逐个与前一个值作比较,将较小值交换到前面,直到找到最小值放在了第1的位置,接着继续下一轮循环(i += 1
)- 若某次循环(
i
)中已无数据交换,则不需要继续下轮循环:
设置flag
。若flag=True
,则说明前一轮循环中仍有数据交换,则继续下一轮循环;若flag=False
,则说明前一轮循环已无数据交换,可以跳出大循环。
② 复杂度
当最好的情况,也就是要排序的序列本身就是有序的,根据优化过的算法可推断出是n-1次
的比较;
当最坏的情况,即待排序列是逆序的情况,则为1+2+3+...+(n-1) = n(n-1)/2 次
的比较。
则总的时间复杂度为 O(n2)。
2、快速排序(Quick Sort)
基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
① 算法实现
QuickCore函数
,其实就是将选取的pivotkey
不断交换,将比它小的换到它的左边,比它大的换到它的右边,它也在交换中不断更改自己的位置,直到完全满足这个要求为止。
② 复杂度
O(nlogn)