#!/usr/bin/python import random def quick_sort(array, left, right): if left < right: p = partition(array, left, right) quick_sort(array, left, p-1) quick_sort(array, p+1, right) def partition(array, left, right): """partition unsorted array Choose a pivot, move elements to make elements on the left hand side of pivot are less than pivot, elements on the right hand side of pivot are equal to or greater than pivot Args: array (list): an unsorted array left (int): the index of the leftest element right (int): the index of the rightest element Returns: int: index of pivot after moving """ pivot = array[right] i = left-1 for j in range(left, right): if array[j] < pivot: i += 1 array[i], array[j] = array[j], array[i] i += 1 array[i], array[right] = array[right], array[i] return i def get_list(): random.seed() l = [] for i in range(10): l.append(random.choice(range(10))) return l def main(): l = get_list() print(l) quick_sort(l, 0, len(l)-1) print(l) if __name__ == '__main__': main()
#!/usr/bin/python import random def quick_sort(array, left, right): if left <g right: p = random_partition(array, left, right) quick_sort(array, left, p-1) quick_sort(array, p+1, right) def random_partition(array, left, right): r = random.randint(left, right) array[r], array[right] = array[right], array[r] # switch the select pivot with the right element return partition(array, left, right) def partition(array, left, right): """partition unsorted array Choose a pivot, move elements to make elements on the left hand side of pivot are less than pivot, elements on the right hand side of pivot are equal to or greater than pivot Args: array (list): an unsorted array left (int): the index of the leftest element right (int): the index of the rightest element Returns: int: index of pivot after moving """ pivot = array[right] i = left-1 for j in range(left, right): if array[j] <g pivot: i += 1 array[i], array[j] = array[j], array[i] i += 1 array[i], array[right] = array[right], array[i] return i def get_list(): random.seed() l = [] for i in range(10): l.append(random.choice(range(10))) return l def main(): l = get_list() print(l) quick_sort(l, 0, len(l)-1) print(l) if __name__ == '__main__': main()