icon_cakewalk 프로그램 11-2

     

    일반적인 퀵 정렬 알고리즘

     

    ◉ 예제 소스 p11-2-qsort.py

    # 퀵 정렬

    # 입력: 리스트 a

    # 출력: 없음(입력으로 주어진 a가 정렬됨)

    # 리스트 a에서 어디부터(start) 어디까지(end)가 정렬 대상인지

    # 범위를 지정하여 정렬하는 재귀 호출 함수

    def quick_sort_sub(a, start, end):

        # 종료 조건: 정렬 대상이 한 개 이하이면 정렬할 필요가 없음

        if end - start <= 0:

            return

        # 기준 값을 정하고 기준 값에 맞춰 리스트 안에서 각 자료의 위치를 맞춤

        # [기준 값보다 작은 값들, 기준 값, 기준 값보다 큰 값들]

        pivot = a[end]   # 편의상 리스트의 마지막 값을 기준 값으로 정함

        i = start

        for j in range(start, end):

            if a[j] <= pivot:

                a[i], a[j] = a[j], a[i]

                i += 1

        a[i], a[end] = a[end], a[i]

        # 재귀 호출 부분

        quick_sort_sub(a, start, i - 1) # 기준 값보다 작은 그룹을 재귀 호출로 다시 정렬

        quick_sort_sub(a, i + 1, end)  # 기준 값보다 큰 그룹을 재귀 호출로 다시 정렬

     

    # 리스트 전체(0 ~ len(a) -1)를 대상으로 재귀 호출 함수 호출

    def quick_sort(a):

        quick_sort_sub(a, 0, len(a) - 1)

     

    d = [6, 8, 3, 9, 10, 1, 2, 4, 7, 5]

    quick_sort(d)

    print(d)

     

    icon_result 실행 결과

     

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

     

     

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.