一. 冒泡排序(BubbleSort)
https://segmentfault.com/a/1190000014598420
https://www.runoob.com/w3cnote/bubble-sort.html
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
过程:
比较相邻的两个数据,如果第二个数小,就交换位置。
从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
继续重复上述过程,依次将第2.3…n-1个最小数排好位置。
冒泡是不断比较调整位置把最小的换到前面;有点像小时候班级排队伍一样,一点点调整,只要你比你前面小,就跟他换,知道你比前面的高。
平均时间复杂度:O(n2)
def bubbleSort(arr):
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 arr
arr = [64, 34, 25, 12, 22, 11, 90]
print(bubbleSort(arr))
类似冒泡排序
def bubble_sort(lists):
# 冒泡排序
count = len(lists)
for i in range(0, count):
for j in range(i + 1, count):
if lists[i] > lists[j]:
# 交换位置
lists[i], lists[j] = lists[j], lists[i]
return lists
A=[7,3,5,2,6]
print(bubble_sort(A))
标红的循环是,找出最小值,放在第一位。
当i=0时,则j=[1,2,3,4]
进入j的循环:
lists[i]=7, lists[j]=3
交换位置
lists[i]=3, lists[j]=7
[7,3,5,2,6] => [3,7,5,2,6]
i=0,j=2
lists[i]=3, lists[j]=5
不符合IF条件:
[3,7,5,2,6] => [3,7,5,2,6]
i=0,j=3
lists[i]=3, lists[j]=2
交换位置
[3,7,5,2,6] => [2,7,5,3,6]
i=0,j=4
lists[i]=2, lists[j]=6
不符合IF条件:
[2,7,5,3,6] => [2,7,5,3,6]
到此第一个循环结束,把2排在第一位
跳出循环,进入外层循环
i=1,j=[2,3,4]
…