1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
from tqdm import tqdm from copy import deepcopy import random import string
def (unsorted: list, begin: int, end: int) -> int: v = unsorted[begin] i = begin + 1 j = end while True: while unsorted[i] < v: if i == end: break i += 1
while unsorted[j] > v: if j == begin: break j -= 1 if i >= j: break unsorted[i], unsorted[j] = unsorted[j], unsorted[i] i += 1 j -= 1 unsorted[begin], unsorted[j] = unsorted[j], unsorted[begin] return j
def _quicksort(unsorted: list, begin: int, end: int): if begin >= end: return j = partition(unsorted, begin, end) _quicksort(unsorted, begin, j - 1) _quicksort(unsorted, j + 1, end)
def quicksort(unsorted_list: list) -> list: random.shuffle(unsorted_list) begin, end = 0, len(unsorted_list) - 1 _quicksort(unsorted_list, begin, end) return unsorted_list
if __name__ == '__main__': for _ in tqdm(range(100000)): l = list(map(int, (random.choice(string.digits) for i in range(random.randint(1, 100))))) assert sorted(deepcopy(l)) == quicksort(deepcopy(l))
|
近期评论