冒泡排序:依次将两个值进行比较,前者比后者大时,位置互换,每个数都会执行一次此过程
算法:
def Bubble sort(n):
if len(n)<2:
return n
else:
for i in range(len(n)-1):
for j in range(len(n)-i-1):
if n[j] > n[j+1]:
n[j],n[j+1] = n[j+1],n[j]
return n
此时,时间复杂度为O(n2)
优化1:
def Bubble sort(n):
if len(n)<2:
return n
else:
for i in range(len(n)-1):
status=true
for j in range(len(n)-i-1):
if n[j] > n[j+1]:
n[j],n[j+1] = n[j+1],n[j]
status=false
if status :
break
return n
设置status 标记,如果本轮排序 元素有交换位置,说明数列无序;否则说明有序,直接跳出大循环,结束排序
优化2:
def bubble_sort(n):
if len(n)<2:
return n
else:
sorbn=len(n)-1
lastnum=0
for i in range(len(n)-1)
state=True
for j in range(sorbn):
if n[j]>n[j+1]:
n[j],n[j+1] = n[j+1],n[j]
state=False
lastnum=j
sorbn=lastnum
if state:
break
return n
优化点:由于每轮进行比较后,后面已经排好序的数据,可以不进行下一轮比较,那么需要找出乱序和已排好序的分界点,这个分界点作为两个数比较的范围