[Python] 퀵 정렬

2020. 8. 25. 00:28·Algorithm/Python

퀵 정렬

기준 값을 정하고 기준값에 맞춰 나머지 데이터들의 위치를 맞추는 알고리즘이다.

 

퀵 정렬 과정

#기준 값을 정한다. (편의상 마지막 값을 기준 값으로 정한다.)
[2, 6, 8, 1, 5, 3, 7, 4] # 기준 값 : 4

#기준 값보다 작으면 기준 값의 앞쪽으로, 기준 값보다 크면 기준값의 뒤로 보낸다.
기준 값 : 4
group1 [2, 1, 3]
4
gruop2 [6, 8, 5, 7]

#재귀 호출을 이용해 정렬한다.
group1 [1, 2, 3]
4
group [5, 6, 7, 8]

#다시 합친다.
group1 + 4 + group2

결과 : [1, 2, 3, 4, 5, 6, 7, 8]

 

퀵 정렬 알고리즘

def quick_sort(a):
    n = len(a)
    #종료조건
    if n <= 1:
        return a
    pivot = a[-1]
    g1 = []
    g2 = []

    for i in range(0, n-1):
        if a[i] < pivot:
            g1.append(a[i])
        else:
            g2.append(a[i])
    
    return quick_sort(g1) + [pivot] + quick_sort(g2)

d = [6, 8, 3, 9, 10, 1, 2, 4, 7, 5]
print(quick_sort(d))

 

또 다른 방법

def quick_sort_sub(a, start, end):
    n = len(a)
    #종료조건
    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)

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)

'Algorithm > Python' 카테고리의 다른 글

[Python] 큐와 스택(queue, stack)  (0) 2020.08.31
[Python] 이분 탐색  (0) 2020.08.26
[Python] 병합정렬  (0) 2020.08.23
[Python] 삽입정렬  (0) 2020.08.22
[Python] 선택정렬  (0) 2020.08.20
'Algorithm/Python' 카테고리의 다른 글
  • [Python] 큐와 스택(queue, stack)
  • [Python] 이분 탐색
  • [Python] 병합정렬
  • [Python] 삽입정렬
🥭Mango
🥭Mango
  • 🥭Mango
    AppleMango🥭
    🥭Mango
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • SwiftUI
        • RxSwift
      • Algorithm
        • C
        • Python
        • Swift
      • Computer Science
        • 컴퓨터 네트워크
        • OS
      • ...
      • 개발 타임캡슐
        • Python
        • Flutter
        • Android
        • Kotlin
        • Java
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Custom Map Marker
    IOS
    typing animation
    코틀린 상속
    Code Base
    swiftUI tabview
    Swift Hello World!
    14503 로봇청소기
    파이썬 토마토
    파이썬
    파이썬 14503
    14503 파이썬
    백준 소수
    Apple Login
    파이썬 1459
    1613 역사
    SwiftUI Apple Login
    MapMarker
    코틀린
    백준 토마토
    파이썬 정렬
    1613 파이썬
    스택
    역사 파이썬
    토마토
    swiftUI Gradients
    6118
    1차원 뿌요뿌요
    파이썬 6118
    SwiftUI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
🥭Mango
[Python] 퀵 정렬
상단으로

티스토리툴바