Exemplo n.º 1
0
 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)
Exemplo n.º 2
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
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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()
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 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