def randomized_partition(array, p, r): """ 随机选择主元版 """ i = random_utils.random_int(p, r) array_utils.exchange(array, i, r) return partition(array, p, r)
def heap_increase_key(queue, x, key): if key < queue[x]: print("new key is smaller than current key") return queue[x] = key while x > 0 and queue[max_heap_sort.parent(x)] < queue[x]: array_utils.exchange(queue, max_heap_sort.parent(x), x) x = max_heap_sort.parent(x)
def partition_by_desc(array, p, r): x = array[r] i = p - 1 for j in range(p, r, 1): if array[j] >= x: i += 1 array_utils.exchange(array, i, j) array_utils.exchange(array, i + 1, r) return i + 1
def partition(arr, p, r, x): # 先将主元x放置到位置r处 for j in range(p, r + 1): if arr[j] == x: array_utils.exchange(arr, j, r) break i = p - 1 for j in range(p, r, 1): if arr[j] <= x: i += 1 array_utils.exchange(arr, i, j) array_utils.exchange(arr, i + 1, r) return i + 1
def randomized_partition(arr, p, r): i = random_utils.random_int(p, r) array_utils.exchange(arr, i, r) return partition(arr, p, r)