顾名思义,冒泡排序的原理就是最小(最大)的元素会在一次次迭代中逐渐浮现到数组的顶端,每一次的迭代都是相邻两个元素之间的比较.
- 具体的算法步骤是:
-
1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2:对每一对相邻元素作同样的比较和操作,一直到数组最后一个元素。第一轮迭代完成后,最后的元素会是最大的数。
3:针对所有的元素重复以上的步骤,每一轮迭代需要的比较次数为n-k,k为已经迭代的次数,因为每迭代以此,就有一个元素确定了位置。 -
举个栗子:
原数组:3 38 5 44 15 36,数组元素为6个
第一轮迭代:
38和5、44和15、44和36交换位置:3 5 38 36 15 44
第二轮迭代:最后一个位置不需要进行比较了。因此比较次数=n-k=6-1=5
38和36、38和15交换位置:3 5 36 15 38 44
以此类推 - python代码实现如下:
def bubbelSort(nums):
n = len(nums)
for i in range(n-1):
for j in range(n-1-i):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
nums = [3, 38, 5, 44, 15, 36]
bubbelSort(nums)
print(nums)
- 算法解析:冒泡排序算法每一次迭代确定一个较大(较小)的元素所在的位置,所以一共需要进行n-1次迭代,因为确定了n-1个位置之后,剩下的一个元素位置必然就确定了,因此代码中第一层循环次数为n-1次,当前已完成迭代次数为k,每一次迭代所需要比较的次数为没有确定位置的元素,即n-k-1,因此第二层循环对应的循环次数为n-i,该算法在原来数组上进行操作,没有产生额外的空间消耗,因此空间复杂度为O(1),该算法的运行次数为(1+2+3+…+n-1)=(n-1)*n/2,时间复杂度为O(n2)。
- 该算法的迭代次数是固定的,不论数组是否有序,迭代次数不变,比较次数不变,该算法不会改变相等元素的相对次序,以此冒泡排序算法是稳定算法。