빠른 정렬python 구현: 귀속과 비귀속

1417 단어 ***

반복 버전

def quick_sort(li, start, end):
    if start >= end:
        return

    left = start
    right = end

    mid = li[left]
    while left < right:

        while left < right and li[right] >= mid:
            right -= 1
        li[left] = li[right]

        while left < right and li[left] < mid:
            left += 1
        li[right] = li[left]

    li[left] = mid

    quick_sort(li, start, left-1)

    quick_sort(li, left+1, end)

반복되지 않는 버전


비귀속 버전은 창고의 사상을 이용하여 계속 정렬해야 하는 마무리 표시를 창고에 저장하고 끊임없이 창고를 나누어 조작해야 한다.
def quick_sort(arr):
    
    # 

    if len(arr) < 2:
        return arr
    stack = []
    stack.append(len(arr)-1)
    stack.append(0)
    while stack:
        l = stack.pop()
        r = stack.pop()
        index = partition(arr, l, r)
        if l < index - 1:
            stack.append(index - 1)
            stack.append(l)
        if r > index + 1:
            stack.append(r)
            stack.append(index + 1)


def partition(arr, start, end):
    #  , 
    pivot = arr[start]
    while start < end:
        while start < end and arr[end] >= pivot:
            end -= 1
        arr[start] = arr[end]
        while start < end and arr[start] <= pivot:
            start += 1
        arr[end] = arr[start]
    #  start = end
    arr[start] = pivot
    return start

좋은 웹페이지 즐겨찾기