Ejemplo n.º 1
0
def quick_sort_random(lst, l=0, r=None):
    """
    Рекурсивный алгоритм быстрой сортировки с случайным выбором разделителя.
    """
    r = len(lst) - 1 if r is None else r
    if len(lst) <= 1 or l >= r:
        return
    m = partition(lst, l, r)
    quick_sort_random(lst, l, m - 1)
    quick_sort_random(lst, m + 1, r)
Ejemplo n.º 2
0
def quick_sort_no_tail_recursion(lst, l=0, r=None):
    """
    Рекурсивный алгоритм быстрой сортировки без хвостовой рекурсии. Разделитель
    определяется случайным образом.
    """
    r = len(lst) - 1 if r is None else r
    if len(lst) <= 1:
        return
    while l < r:
        m = partition(lst, l, r)
        quick_sort_no_tail_recursion(lst, l, m - 1)
        l = m + 1
Ejemplo n.º 3
0
def quick_sort_no_recursion(lst, l=0, r=None):
    """
    Алгоритм быстрой сортировки без рекурсии. Разделитель определяется случайным
    образом.
    """
    r = len(lst) - 1 if r is None else r
    if len(lst) <= 1:
        return
    q = [(l, r)]
    while q:
        l, r = q.pop(0)
        if l >= r:
            continue
        m = partition(lst, l, r)
        q.append((l, m - 1))
        q.append((m + 1, r))
Ejemplo n.º 4
0
    def _quick_sort(lst, l=0, r=None, depth=0):
        depth += 1
        if depth > max_depth:
            return False

        r = len(lst) - 1 if r is None else r
        if len(lst) <= 1:
            return True

        if l >= r:
            return True

        m = partition(lst, l, r, index_func=median_sep_index)
        res1 = _quick_sort(lst, l, m - 1, depth)
        res2 = _quick_sort(lst, m + 1, r, depth)
        if depth > max_depth:
            return False

        depth -= 1
        return res1 and res2
Ejemplo n.º 5
0
 def test_partition(self):
     for _ in range(100):
         lst = [random.randint(0, 40) for _ in range(100)]
         pos = partition(lst, 0, len(lst) - 1)
         self.verify_list(lst, pos)