def perm(list, begin, end): if begin == end: printout_list = [] for list_item in list: printout_list.append(list_item) print printout_list else: for i in range(begin, end + 1): swap.swap(list, begin, i) #确定begin+1~end之间的排列组合 perm(list, begin + 1, end) swap.swap(list, begin, i)
def bubble_sort(list): for size in reversed(range(len(list))): # 设置排序校验 sorted = True i = 0 for k in range(1, size + 1): if list[k] < list[i]: swap.swap(list, i, k) sorted = False i = k if sorted: break
def selection_sort(list): for size in reversed(range(len(list))): # 设置排序校验 sorted = True #寻找0~size中,最大值的index max_order = 0 for k in range(1, size + 1): if list[k] > list[max_order]: max_order = k else: sorted = False #i位置放置最大值 swap.swap(list, max_order, size) if sorted: break
def heap_sort(array): array_length = len(array) for i in range(array_length, -1, -1): heapify(array, array_length, i) for i in range(array_length - 1, 0, -1): array = swap(array, i, 0) heapify(array, i, 0)
def selection_sort(array): array_length = len(array) for i in range(array_length): min_index = i for j in range(i + 1, array_length): if array[j] < array[min_index]: min_index = j array = swap(array, i, min_index)
def heapify(array, array_length, i): largest = i left = 2 * i + 1 right = 2 * i + 2 if left < array_length and array[i] < array[left]: largest = left if right < array_length and array[largest] < array[right]: largest = right if largest != i: array = swap(array, i, largest) heapify(array, array_length, largest)
def partition(arr, start, stop): pivot = start i = start - 1 j = stop + 1 while True: while True: i = i + 1 if arr[i] >= arr[pivot]: break while True: j = j - 1 if arr[j] <= arr[pivot]: break if i >= j: return j arr = swap(arr, i, j)
def partition_rand(arr, start, stop): rand_pivot = random.randrange(start, stop) arr = swap(arr, start, rand_pivot) return partition(arr, start, stop)