排序
冒泡排序(Bubble Sort)时间复杂度为O(n^2)
列表每两个相邻的数,如果前面比后面大,则交换这两个数
一趟排序完成后,则无序区减少一个数,有序区增加一个数。
def bubble_sort(li):
for i in range(len(li)-1): # i代表的是第几趟,由于最后一趟不需要再走了,所以N-1为需要走多少趟
for j in range(len(li)-i-1): # j代表的是指针,指向第几个元素,走了几趟,本来剩N-i趟,但是最后一个数字不需要再去比较,所以N-i-1
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1],li[j]
li = [random.randint(1, 100) for i in range(1, 50)]
print(li)
bubble_sort(li)
print(li)
结果如下:
冒泡排序有个可以改良的地方,如果冒泡排序中一趟没有发生变化,则说明列表已经有序,可以直接结束算法
例如:
li = [1, 2, 3, 4, 7, 8, 6, 5]
这个列表在第4趟的时候已经排序结束,但是算法会一直跑完7趟,改良后的冒泡排序
def bubble_sort(li):
for i in range(len(li)-1):
exchange = False
for j in range(len(li)-i-1):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
exchange = True
print(li)
if not exchange:
return