冒泡排序
冒泡排序是一种简单的排序算法。具体操作是重复地走访要排序的数列,没走过一个值,就会将前一个和该值比较,如果他们顺序错误,怎交换位置,否则不交换位置,直到没有错误顺序为止。因此就可以直到,对于n个数值来说,那么冒泡排序就需要
O
(
n
2
)
O(n^2)
O(n2)次比较,最坏的情况下,需要
O
(
n
2
)
O(n^2)
O(n2)次交换位置。
冒泡排序算法的具体操作步骤如下:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
图片示意图:
- 第一步(i=0): 第一个数和第二个数比较,发现第一个没有第二个大,顺序正确,不交换位置
- 第二步(i=1): 第二个数和第三个数比较,发现第二个比第一个大,顺序错误,交换位置
- 第三步(i=2): 第三个数和第四个数比较,发现第三个比第四个大,顺序错误,交换位置
- 第四步(i=3): 第四个数和第五个数比较,发现第四个比第五个大,顺序错误,交换位置
动图解释:
动图可视化python程序,可以查看这里的文件。
使用python实现:
def bubble_sort(nums):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return nums
arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(arr)
print ("排序后的数组:")
for i in range(len(arr)):
print ("%d" %arr[i])
输出结果:
11
12
22
25
34
64
90