def _do_sort(self, data: data_store) -> None: size = data.size() for i in range(size // 2 - 1, -1, -1): self._heapify(data, size, i) for i in range(size - 1, 0, -1): data.swap(i, 0) self._heapify(data, i, 0)
def radix_sort(self, data: data_store, exp: int) -> bool: changed = False for i in range(0, data.size() - 1): if self.is_greater_than(data, exp, i, i + 1): data.swap(i, i + 1, skip_draw=True) changed = True data.draw() return changed
def _do_sort(self, data: data_store) -> None: for i in range(data.size()): min_index = i for j in range(i + 1, data.size()): if data.is_greater_than(min_index, j): min_index = j if not i == min_index: data.swap(min_index, i)
def _do_sort(self, data: data_store) -> None: sorted = False while not sorted: sorted = True for i in range(data.size() - 1): if data.is_greater_than(i, i + 1): data.swap(i, i + 1, skip_draw=True) sorted = False data.draw()
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 _do_sort(self, data: data_store) -> None: size = data.size() gap = size swapped = True while gap != 1 or swapped: gap = self.__get_next_gap__(gap) swapped = False for i in range(0, size - gap): if data[i] > data[i + gap]: data.swap(i, i + gap) swapped = True
def _heapify(self, data: data_store, size: int, root: int) -> None: largest = root left = (2 * root) + 1 right = (2 * root) + 2 if left < size and data[largest] < data[left]: largest = left if right < size and data[largest] < data[right]: largest = right if largest != root: data.swap(root, largest) self._heapify(data, size, largest)
def _do_sort(self, data: data_store) -> None: index = 0 found = False while index < data.size(): if index == 0: index += 1 if found: data.draw() found = False elif data.is_greater_than_or_equal(index, index - 1): index += 1 if found: data.draw() found = False else: data.swap(index, index - 1, skip_draw=True) index -= 1 found = True
def __flip(self, data: data_store, end: int) -> None: start = 0 while start < end: data.swap(start, end, skip_draw=True) start += 1 end -= 1