def _do_sort(self, data: data_store) -> None: for i in range(1, data.size()): src_index = i for j in range(0, i): if data.is_less_than(src_index, j): data.move(src_index, j) break
def __insertion_sort__(self, data: data_store, start: int, end: int): for i in range(start, end): src_index = i for j in range(0, i): if data.is_less_than(src_index, j): data.move(src_index, j) break
def __partition(self, data: data_store, low: int, high: int) -> None: pivot_index = random.randint(low, high) data.swap(pivot_index, low) pivot_index = low for j in range(low + 1, high + 1): if data.is_less_than(j, pivot_index): data.move(j, pivot_index) pivot_index += 1 return pivot_index
def __merge(self, data: data_store, start: int, mid: int, end: int) -> None: start2 = mid + 1 if (data[mid] <= data[start2]): return while start <= mid and start2 <= end: if data.is_less_than(start, start2): start += 1 else: data.move(start2, start) start += 1 mid += 1 start2 += 1