排序算法
冒泡排序
def sort(alist):
for i in range(len(alist)-1):
for j in range(len(alist)-1-i):
if alist[j] > alist[j+1]:
alist[j], alist[j+1] = alist[j+1], alist[j]
return alist
平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)
选择排序
def sort(alist):
for i in range(len(alist)-1):
max = 0
for j in range(1,len(alist)-i):
if alist[j] > alist[max]:
max = j
alist[len(alist)-1-i],alist[max] = alist[max],alist[len(alist)-1-i]
return alist
平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)
插入排序
def sort(alist):
for i in range(1,len(alist)):
while i > 0 :
if alist[i-1] > alist[i]:
alist[i-1], alist[i] = alist[i], alist[i-1]
i -= 1
else:
break
return alist
平均时间复杂度O(n^2)
最坏时间复杂度O(n^2)
空间复杂度O(1)
快速排序
def sort(alist, start, end):
low = start
high = end
if low > high:
return
#基数
mid = alist[low]
while low < high:
while low < high:
# 向左偏移high
if alist[high] > mid:
high -= 1
else:
alist[low] = alist[high]
break
while low < high:
#向右偏移low
if alist[low] < mid:
low += 1
else:
alist[high] = alist[low]
break
if low == high:
alist[low] = mid
break
#作用到左侧
sort(alist, start, high-1)
#作用到右侧
sort(alist, low+1, end)
return alist
平均时间复杂度O(nlogn)
最坏时间复杂度O(n^2)
空间复杂度O(logn)

浙公网安备 33010602011771号