Python3 빠르게 이해하기 쉬운 주문

Python3 빠른 정렬

빠른 종류 에 속하는 교환 일종의 분할 및 정복 알고리즘 .

아이디어는 :
요소가 분리 수거, 기준점으로 지정된 컬렉션의 첫 번째 요소로 들어 스캔 및 과거의 시리즈를 통해 , (아래 코드 참조) 때문에 소자 기준점 기준점의 좌측보다 작은 것이되도록 기준점의 우측 소자가 기준 온도보다 크면,이 원점 경계의 좌우 두 개의 서브 세트들로 분할된다 재귀 서브 세트 각각에 대해 상기 단계를 반복하는 각 요소의 최소한의 때까지 완료 해결 각 문제의 최소한의 설명은, 그래서 전반적인 문제 해결을 완료 할 수있다.

코드 :

# 快速排序 arr要排序的元素总集,left要排序的最左索引,right要排序的最右索引
def kp(arr, left, right):
    old_left = left
    old_right = right
    if left >= right:
        return
    base = arr[left] # 指定left为基准点,存储基准值
    toLeft = True # 扫描方向
    while left < right: # 只要left < right,就一直扫描;扫描的结束条件是left和right重合
        if toLeft: # 从右向左扫描:若找到比base小的,则把值赋给left处,然后left+1,扫描方向变为向右;否则继续向左扫描(right - 1)
            if arr[right] < base:
                arr[left] = arr[right]
                toLeft = False # 反转扫描方向
                left += 1
            else:
                right -= 1
        else: # 从左向右扫描:若找到比base大的,则把值赋给right,然后right-1,扫描方向变为向左;否则继续向右扫描(left + 1)
            if arr[left] > base:
                arr[right] = arr[left]
                toLeft = True # 反转扫描方向
                right -= 1
            else:
                left += 1
    arr[left] = base # 把记录的基准值赋值在left和right重合处
    
    # 继续对左右2个子问题进行递归求解,看,这就是分治算法思想(子问题相互独立不重合)
    kp(arr, old_left, left - 1)
    kp(arr, left + 1, old_right)


if __name__ == '__main__':
    arr = [5, 6, 3, 1, 7, 8, 19, 4, 88, -2]
    kp(arr, 0, len(arr) - 1)
    print(arr)
게시 24 개 원래 기사 · 원의 칭찬 0 · 조회수 (403)

추천

출처blog.csdn.net/qq_18138105/article/details/105353637