冒泡排序是一种经典排序算法,它的核心逻辑就是先把序列的最大值或者最小值交换到最后,然后再把序列前n-1个元素的的最大值或最小值交换到最后。排序规则:
- 将第1个元素与第2个元素进行比较,如果大于,则与第二个元素进行交换。此时能保证第2个元素>=第1个元素。
- 将第2个元素与第3个元素进行比较,如果大于,则与第二个元素进行交换。此时能保证第3个元素>=它前面的元素。
- 按上述比较方式继续比较,将第
n
个元素与第n+1
个元素进行比较,如果大于,则将这2个元素进行交换,这样一个序列的最大值会不断的从第一个元素一直交换到最后一个元素。这个过程中最大值就像气泡一样往上冒,所以取名冒泡排序。n
个元素需要比较n-1
次比较才能把最大值冒泡到最后面,因为到最后一个元素的时候,它后面没有元素了,所以最后一个元素就不需要比较了。 - 经过上面第1轮比较,最大值已经到最后面了,接下来只要排序第1个到第n-1个元素就可以了,将这n-1个元素继续按照前3步的方式进行排序,
n
个元素需要经过n-1
轮冒泡操作,理论上是需要n轮,但是最后1轮的时候,只剩下一个元素了。
源代码
def bubble(arr):
length = len(arr)
for i in range(length-1):
for j in range(length-i-1):
if arr[j] > arr[j+1]:
arr[j+1],arr[j] = arr[j],arr[j+1]
if __name__ == "__main__":
list = [1,3,5,5,-1,100,2,4]
bubble(list)
print(list)
运行结果
jagitch@34c4dd4d4a3e:bubble$ python main.py
[-1, 1, 2, 3, 4, 5, 5, 100]