冒泡排序——对于给定的一组元素集中,遍历元素使相邻的两个元素进行比较并按升序或者降序排列,重复上述操作直到没有相邻元素进行比较。
代码如下:
总共有n个元素,最开始从第0个元素到第n-1个元素两两之间进行比较,使得最小的元素被放在n-1的位置上,下一次便从0-n-2个元素间两两比较,使得最小的元素放在n-2的位置上...如此循环下去直到没有元素可以比较。
对于任意的元素集进行冒泡排序都能得到最终的结果,但是要一直比直到没得比的情况,如果存在不用比即整个元素集中有小段是有序的呢?于是便有了:
定义了一个sort变量来维护是否有过交换,因此整个冒泡排序的交换次数应该就是元素间两两无序的个数m,整个效率大概就是O(mxn)。往更极端的想,整个元素集被分为了两段,一段有序,一段无序,因此我们为何还要去管有序的呢?我们只需要去使无序变成有序即可:
我们只需要用last去指向无序的即可,而有序的则不在考虑的范围中...
冒泡排序的最好情况时间复杂度为:O(n)
最坏时间复杂度为:O(n²)
平均时间复杂度为:O(n²)
空间复杂度为:O(1)
稳定性:稳定