1 算法图解 时间复杂度同老式快排,因为老式快排一轮也是要扫所有元素
【这个代码 优点:极易理解 [自猜]缺点:扫完小于基准的,扫大于的时候要重复扫小于的,会浪费时间?】
def quick_sort(list):
'''基线条件'''
if len(list) <= 1:
return list # 基线 只执行一侧的quick_sort(small) ,而且只执行这个小return 不执行下面那个
'''递归条件'''
mid = list[0] # 基准值
small = [ tmp for tmp in list[1:] if tmp < mid ]
big = [ tmp for tmp in list[1:] if tmp > mid ]
return quick_sort(small) + [mid] + quick_sort(big)
递归蒙蔽就画图,差不多明白就行,你不可能懂透,差不多就行了!
2 老式 快排 ———— [自猜:时间复杂度应该都是On一轮吧 因为法1法2都是一轮全扫一遍]
def quickSort(list, first, last):
'''就剩1个元素的时候,左递归全是0=0,右递归全是2>1 ,是正确的对的!'''
if first >= last:
return
low = first
high = last
mid_value = list[first]
while low < high: # 这个while结束的是一轮,所以这个交换算法也要扫所有数字,和算法图解应该是同时间复杂度
while low < high and list[high] >= mid_value:
high -= 1
list[low] = list[high]
while low < high and list[low] < mid_value:
low += 1
list[high] = list[low]
list[low] = mid_value
# 递归要放外面
quickSort(list, first, low-1)
quickSort(list, low+1, last)