什么是冒泡排序:
冒泡排序是相邻的两个元素相互比较,如果按照从小打到大排序,那么两两元素比较后,小的元素放前面,大的元素放后面。一一比较,直到所有的元素比较完。
步骤:
第一对元素比较:比较第1个元素和第2个元素,将小的元素放前面,大的元素放后面。
第二对元素比较,也就是第2个元素和第3个元素的大小比较,同样小的放前面,大的元素放后面。
…
第一趟直到最后一对元素大小的比较,小的放在前面,大的放在后面。
直到所有的元素第一趟比较结束后,最后的这个元素一定是数组中最大的元素。
重复以上步骤(最后一个元素不参加大小比较),当第二趟结束比较后,倒数第二个元素便是数组中倒数第二大的元素。当进行第三趟元素大小比较时,同理,倒数第二个元素不参加大小比较。
举个栗子:
对 1,5,4,2,7冒泡排序
第一趟:
1): 1,5,4,2,7(1和5 比较)
2):1,4,5,2,7(5和4比较)
3):1,4,2,5,7(2和5比较)
4):1,4,2,5,7(5和7比较)
比较4次后,最大的元素沉到数组的末尾,7是最大的元素;
第二趟排序:
对 1,4,2,5冒泡排序
1):1,4,2,5
2):1,2,4,5
3):1,2,4,5
比较3次后,改数组中最大的元素为5 ,也就是5是倒数第二大元素
以此类推,对前后的元素进行排序,得到最终的结果。
冒泡排序的稳定性
什么是稳定性?
当对数组中两个大小一样的元素进行排序比如对1,2,2排序,当第二个元素2和第三个元素2相比较时,此时两个元素大小相同,不用将两个大小一致的元素互换位置,因为冒泡排序是稳定的排序方式。
**算法复杂度比较
当数组中的元素按照从小到大的顺序排序时,此时是最好的情况,此时最佳时间复杂度为O(n),
如果数组中的元素按反顺序排序时,则所有的元素都要更换位置,此时最坏时间复杂度为O(n^2 )。
因此平均时间复杂度为O(n^2 )。
用python3.0代码实现的冒泡算法
一:
结果如下:
二:引入二分法,逐步输出结果
此时每一步骤的结果都输出,结果如下
三:只得到最终的排序结果,代码如下: