공상개발
Home
  • 분류 전체보기 (54)
    • Memoir (3)
    • Server (0)
    • Computer Science (32)
      • Project (1)
      • Linux (15)
      • Data Structure (8)
      • Algorithm (8)
    • DB (1)
      • JDBC (1)
    • Language (11)
      • Java (2)
      • C 튜터링 (9)
    • Tip (7)
      • tip (7)
    • Github (0)
      • Github (0)
블로그 내 검색
Instargram

공상개발

상상 박스

  • Computer Science/Algorithm

    5. 퀵 정렬(quick sort)

    2021. 4. 10.

    by. 공상개발

    안녕하세요.

    공상 개발입니다.

     

    오늘은 분할 정복 알고리즘의 일종인 퀵 정렬에 대해 알아보는 시간을 가지겠습니다.

    퀵 정렬은 정렬 알고리즘 중 제일 까다롭다고 생각합니다. 


     

    1. 퀵 정렬(quick sort)

    2. 퀵 정렬 알고리즘 실행 과정

     


     

    # 퀵 정렬(quick sort)

     

    퀵 정렬은 분할 알고리즘으로 분할된 부분 배열을 재귀적으로 정렬하는 알고리즘입니다.

    피벗을 정한 뒤 피벗의 위치를 확정해가며 정렬이 이루어집니다.

    특정한 값을 기준으로 큰 숫자와 작은 숫자를 서로 교환한 뒤에 배열을 반으로 나눕니다.

     

    퀵 정렬 로직


    분할 : 분할 원소를 중심으로 두 부분 배열로 분할

    정복 : 분할 원소를 제외한 나머지 두 부분 배열에 퀵 정렬을 재귀 호출하여 정렬

    통합 : 필요 없음

     

     

    퀵 정렬 예시

     

    이때, 분할(partition) 알고리즘과 퀵 정렬(quickSort) 알고리즘으로 나누어서 구현할 수 있습니다.

     

    QuickSort 함수

     

    QuickSort 함수는 요소가 1개가 될 때까지 재귀를 하는 재귀 함수이며, 분할 역할을 담당합니다.

     

    QuickSort 함수 로직 예시 이미지

     

     

    Partition 함수

    Partition 함수는 pivot보다 작은 아이템은 왼쪽 배열로, 큰 아이템은 오른쪽 배열로 분할합니다.

    조건에 맞춰 위치를 바꾸어주는 함수이며, 정복 역할을 담당합니다.

     


    소스 코드










    출력 값







     


     

    # 퀵 정렬 알고리즘 실행 과정

     

    배열 a [] ={100,34,189,56,150,140,9,123}에 대하여 퀵 정렬을 사용하여 알고리즘 정렬이 실행되는 과정입니다.

    병합 정렬 업로드 편에서도 말했듯이, 실행 과정을 직접 그려보는 편이 가장 이해하기 편하다고 생각합니다.

     

     


     

     

    작성된 내용 중 잘못된 정보나 접근이 있을 시, www.instagram.com/hong_.98/을 통해 말씀해 주시기 바랍니다.

    좋은 하루 보내세요.

    저작자표시 비영리 변경금지 (새창열림)

    'Computer Science > Algorithm' 카테고리의 다른 글

    7. DP - 행렬 경로 문제  (0) 2021.05.08
    6. 동적 프로그래밍(Dynamic Programming)  (0) 2021.05.06
    4. 병합 정렬(merge sort)  (0) 2021.04.09
    3. 분할 정복(divide-and-conquer) 설계 전략  (0) 2021.03.21
    2. 선택 정렬(Selection Sort), 버블 정렬(Bubble Sort), 삽입 정렬(Insertion Sorting)  (0) 2021.03.16

    댓글

    관련글

    • 7. DP - 행렬 경로 문제 2021.05.08
    • 6. 동적 프로그래밍(Dynamic Programming) 2021.05.06
    • 4. 병합 정렬(merge sort) 2021.04.09
    • 3. 분할 정복(divide-and-conquer) 설계 전략 2021.03.21
    맨 위로
전체 글 보기
  • 깃허브
  • 홍정완
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

천천히,

Designed by Nana
블로그 이미지
공상개발
생각

티스토리툴바