[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
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바