# Quicksort recursive play DEF quicksort (ARR): # End Condition IF len (ARR) <=. 1 : return ARR # intermediate value is more stable middle ARR = [len (ARR) 2 // ] # remember the middle out, and finally into the middle del ARR [len (ARR) 2 // ] # using the formula list, 100W data, 2.9s # left = [X for X in ARR IF X <= middle] # right = [X for X in IF X ARR> Middle] # of 2.6s left = [] right = [] for X in ARR: left.append (X)IF X <= middle the else right.append (X) # remember to put the middle middle return quicksort (left) + [middle] + quicksort (right) # nonrecursive play DEF quicksort2 (ARR): '' ' analog stack operations to achieve non quicksort recursive '' ' IF len (ARR) <2 : return ARR Stack = [] stack.append (len (ARR) -. 1 ) stack.append (0) the while Stack: L = stack.pop () R & lt = stack.pop () index = partition(arr, l, r) if l < index - 1: stack.append(index - 1) stack.append(l) if r > index + 1: stack.append(r) stack.append(index + 1) def partition(arr, start, end): # 分区操作,返回基准线下标 pivot = arr[start] while start < end: while start < end and arr[end] >= pivot: end -= 1 arr[start] = arr[end] while start < end and arr[start] <= pivot: start += 1 arr[end] = arr[start] # 此时start = end arr[start] = pivot return start if __name__ == '__main__': li = list(range(1000000)) import random random.shuffle(li) sorted = quicksort(li) print(sorted[:10])
Quick Sort.