快速排序
快排时间比lowB三人组排序快太多了!
时间复杂度:O(n*logn)
@cal_time
def choice(list):
"""选择排序,将最小数放在第一位,每次都会缩小排序区域"""
for i in range(0,len(list)):
min_loc = i # 从索引0开始取参考值
# 将剩余区域内的数逐个与min_loc的数比较,若比min_loc对应的值小则取代之
for j in range(i+1,len(list)):
if list[j] < list[min_loc]:
min_loc = j
# 到最后就确定了这一趟的最小值的索引位置
list[i],list[min_loc] = list[min_loc],list[i]
# 位置对调
return list
def partition(li, left, right):
"""
:param li:列表
:param left:0
:param right:len(li)-1
:return left左右的索引位置
"""
tmp = li[left]
while left < right:
# 指针指向右侧,逐个左移动,直到右侧的数小于7
while left < right and li[right] >= tmp:
right -= 1
# 将数移动到左侧第一位
li[left] = li[right]
# 指针移动到左侧,逐个右移,直到左侧的数大于7
while left < right and li[left] <= tmp:
left += 1
li[right] = li[left]
li[left] = tmp
return left
def _quick_sort(li,left,right):
"""快排"""
if left < right:
mid = partition(li, left, right)
_quick_sort(li, left, mid - 1)
_quick_sort(li, mid + 1, right)
lst = list(range(10000))
import random
import time
random.shuffle(lst)
import copy
lst1 = copy.deepcopy(lst)
# 排序时间对比
@cal_time
def quick_sort(li):
_quick_sort(li, 0, len(li)-1)
quick_sort(lst) # quick_sort running time: 0.0665440559387207 secs.
choice(lst1) # choice running time: 9.267627000808716 secs.