SlideShare a Scribd company logo
코딩테스트 합격자 되기 C++
13장 정렬
저자 박경록
목차
- 정렬의 의미
- 정렬이 필요한 이유
- 삽입 정렬
- 머지 정렬
- 힙 정렬
- 우선순위 큐
정렬의 의미
- 데이터를 특정 기준에 따라 순서대로 배치
예를들면…. 오름차순(작은 값부터 큰 값으로), 내림차순(큰 값부터 작은 값으로)
1 4 3
1 3 4
4 3 1
오름차순
내림차순
코테 에서 정렬은 언제 필요한가?
- 정렬된 상태에서 동작하는 알고리즘을 사용해야 하는 경우
=> 이진 탐색
=> 병합정렬의 병합
1 4 5 7 9 12 14
9 12 14
9
1
3
5
2
4
6
1 2 3 4 5 6
병합정렬의 병합
이진탐색
대표적인 정렬 알고리즘(삽입정렬)
- 왼쪽은 정렬된 영역, 오른쪽은 비 정렬된 영역으로 나눠짐
- 정렬된 영역이 점점 확장되어 비 정렬된 영역이 없어지는 정렬 방법
- 비 정렬된 영역의 맨 앞의 원소를 정렬된 영역의 적절한 곳에 추가
비정렬
정렬
비정렬
정렬
정렬
삽입정렬 흐름
정렬 비정렬
맨 앞의 원소를 정렬 영역의 정렬 상태를
유지할수 있는 위치에 삽입
삽입정렬 규칙
삽입정렬 과정
1 5 2 3
1 5 2 3
현재 키 : 5
1 < 5 이므로 5는 현재 위치에 넣으면 됨
(결국 제자리)
1 5 3
현재 키 : 2
5 > 2 이므로, 5를 오른쪽으로 이동
1 5 3
현재 키 : 2
1 < 2 이므로 빈칸에 2 삽입
1 2 5
현재 키 :3
5 > 3 이므로 5를 오른쪽 이동
1 2 5
현재 키 :3
2 < 3 이므로 빈칸에 3 삽입
1 3 5
2 정렬 끝
삽입정렬의 BEST / WORST 케이스
대표적인 정렬 알고리즘(병합 정렬)
- 리스트를 반으로 나누어 각각 정렬한 뒤, 합치는 방식
- 각 부분 리스트를 재귀적으로 정렬
- 최종적으로 정렬된 두 리스트를 합쳐서 전체 리스트 정렬
대표적인 정렬 알고리즘(병합 정렬, 흐름)
원소가 한개가 될 때 까지 반절로 계속 쪼갬
=> 배열을 물리적으로 쪼개는게 아님
=> 인덱스를 활용해서 쪼개진 것처럼 동작
정렬을 하면서 합침
=> 어떻게 합칠것인지를 알아야 함
대표적인 정렬 알고리즘(병합 정렬,합치는 부분)
3
4
2
6
2
3
4
2
6
2 3
3
4
2
6
2 3 4
3
4
2
6
2 3 4 6
대표적인 정렬 알고리즘(힙정렬)
원본 데이터
힙 구축
(max_hepify)
힙 정렬
(heap sort)
데이터 삽입
대표적인 정렬 알고리즘(힙 정렬, 힙 이란)
부모노드가 자식노드보다 항상 크면 최대힙, 항상 작으면 최소힙
대표적인 정렬 알고리즘(힙 구축하기)
max_heapify() 연산을 노드번호 N/2 부터 1 까지 차례대로 시행
max_heapify() 연산
1. 현재 노드와 자식 노드 비교(자식 노드가 없다면 연산 종료)
2. 현재 노드가 가장 크지(작지) 않다면, 가장 큰(작은) 자식 노드의 값과 swap
3. 맞바꾼 자식 노드 위치를 현재노드로 해서 1부터 반복
대표적인 정렬 알고리즘(힙정렬, max_heapify)
4번노드가 가장 큰 값, 부모노
드와 swap
Max_heapify(4) 수행
maxheapify(2) 수행
heapify(9/2) -> heapify(1) 까지 차례대로 수행 하면 비정렬 데이터가 힙 구조로 완성됨(정렬된 상태)
=> N/2 부터 하는 이유는… N/2보다 큰 노드는 자식이 없으므로(부모인덱스 는 자식인덱스 *2 혹은 *2 +1)
8
7
대표적인 정렬 알고리즘(힙정렬)
1. 정렬되지 않은 데이터로 최대(소)힙 구축
2. 현재 최대(소)힙의 루트노드와 마지막 노드를 맞바꿈
3. 최대(소)힙 사이즈가 1이면 종료,
최대(소)힙 사이즈를 1 줄임, max_heapify(1) 수행.. 다시 2.로감
우선순위큐
기존 큐는 FIFO(First In First Out)로 동작
우선순위큐는 In 순서와 상관없이 우선순위가 높은 원소가 먼저 Out 됨
우선순위큐의 구현시 고려할 점
원소가 계속 들어오는 상황에서 정렬 상태를 유지 해야함
=> 기존 대부분 정렬 방법은 O(NlogN)
=> 힙정렬을 사용할 경우 삽입/삭제시 O(logN) 보장 => 우선순위큐는 힙을 사용
코테에서 우선순위큐는 최단경로 알고리즘(다익스트라,밸만포드) 구현시 많이 사
용 됨
STL에서 제공하는 우선순위큐
- 이미 STL에서 우선순위 큐를 제공함
- 기본적으로 최대힙으로 동작함
10 30 20 5
10
30
10
20
30
10
20
30
10
5
10, 30, 20, 5 순서대로
푸시 하는 경우
30, 20, 10, 5 순서대로
팝 됨(최대 힙)
STL에서 제공하는 우선순위큐(실제 사용)
- 우선순위를 따로 제공할수도 있음(사용자 정의타입은 필수)
- 기본적으로 최대힙으로 동작함(큰 값이 먼저)
정렬의 구현
삽입 정렬 병합 정렬 힙 정렬
각 정렬 알고리즘 비교
커뮤니티 소개(오픈카톡방) cont’d
- 저자 직접 운영
- 대략 400명 정도 인원이 자유롭게 소통
- 개인적인 주제 및 코딩 관련 소통 가능
커뮤니티 소개(오픈카톡방)
커뮤니티 소개(깃허브) cont’d
- 책 문제의 정답코드
- 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘
- C++ 기본 문법
- STL의 성능 비교
커뮤니티 소개(깃허브)
커뮤니티 소개(디스코드) cont’d
- 모각코 진행
- 공식 스터디 / 개인 스터디 모집 공고 및 진행
- 책 관련 문의 / 답변
커뮤니티 소개(디스코드)

More Related Content

PPTX
코딩테스트 합격자 되기 C++ 15장 동적계획법에 대한 강의자료 입니다.
ultrasuperrok
 
PPTX
코딩 테스트 합격자 되기 C++ 11장 그래프에 대한 강의 자료 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
ultrasuperrok
 
PPTX
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 12장 백트래킹에 대한 강의 자료 입니다.
ultrasuperrok
 
PPTX
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
ultrasuperrok
 
PPTX
Sorting Methods.pptx
Bharati Vidyapeeth COE, Navi Mumbai
 
코딩테스트 합격자 되기 C++ 15장 동적계획법에 대한 강의자료 입니다.
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 11장 그래프에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 12장 백트래킹에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
ultrasuperrok
 

What's hot (20)

PDF
String matching, naive,
Amit Kumar Rathi
 
PPTX
01 Knapsack using Dynamic Programming
Fenil Shah
 
PPTX
Linked list
RahulGandhi110
 
PDF
Algorithm and Data Structure - Queue
AndiNurkholis1
 
PPT
Red black trees presentation
Dexter Paul Gumahad
 
PPTX
Stack, Queue, Linked List.pptx
Bharati Vidyapeeth COE, Navi Mumbai
 
PPTX
Sorting algorithms
Trupti Agrawal
 
PPT
Depth First Search ( DFS )
Sazzad Hossain
 
PDF
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Balwant Gorad
 
PPTX
Dbscan
RohitPaul52
 
PPT
Red black tree
Rajendran
 
PPT
Sorting Algorithms
multimedia9
 
PPTX
Insertion sort
almaqboli
 
PPT
Medians and order statistics
Rajendran
 
PPT
Selection sort
stella D
 
PPTX
Introduction to numpy Session 1
Jatin Miglani
 
PPT
Queue
Nabeel Ahsen
 
PDF
String matching algorithms
Mahdi Esmailoghli
 
String matching, naive,
Amit Kumar Rathi
 
01 Knapsack using Dynamic Programming
Fenil Shah
 
Linked list
RahulGandhi110
 
Algorithm and Data Structure - Queue
AndiNurkholis1
 
Red black trees presentation
Dexter Paul Gumahad
 
Stack, Queue, Linked List.pptx
Bharati Vidyapeeth COE, Navi Mumbai
 
Sorting algorithms
Trupti Agrawal
 
Depth First Search ( DFS )
Sazzad Hossain
 
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Balwant Gorad
 
Dbscan
RohitPaul52
 
Red black tree
Rajendran
 
Sorting Algorithms
multimedia9
 
Insertion sort
almaqboli
 
Medians and order statistics
Rajendran
 
Selection sort
stella D
 
Introduction to numpy Session 1
Jatin Miglani
 
String matching algorithms
Mahdi Esmailoghli
 
Ad

Similar to 코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다. (20)

PDF
Algorithms summary korean
Young-Min kang
 
PDF
Shell, merge, heap sort
Hyun Jin Moon
 
PPTX
[데브루키]노대영_알고리즘 스터디
대영 노
 
PPTX
amugona study 2nd
who7117
 
PDF
알고리즘 스터디(정렬) Seungdols
seungdols
 
PPTX
[알고리즘 스터디 2주차]병합정렬/퀵정렬/힙정렬
Codingclub
 
PPT
2007 Icpc2
yonsei
 
PDF
[D2CAMPUS] Algorithm tips - ALGOS
NAVER D2
 
PPTX
Data and Sorting Algoritm
Minsuk Lee
 
PDF
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
S.O.P.T - Shout Our Passion Together
 
PDF
알고리즘
승우 백
 
PPTX
OnePointLesson PriorityQueue 우선순위 큐
KWANGIL KIM
 
PPTX
알고리즘
Kwang-Hyun Park
 
PPTX
Quick sort
HyungjunJu
 
PDF
2021 여름방학 정기 세미나 3주차
Moonki Choi
 
PPTX
02. binary search tree
승혁 조
 
PDF
[Algorithm] Sorting Comparison
Bill Kim
 
PDF
Quick, Tree sort
Hyun Jin Moon
 
PPTX
[11 0212] 정렬, 선택, 탐색 알고리즘
SeungMin Yang
 
PPTX
컴퓨터개론09
Edward Hwang
 
Algorithms summary korean
Young-Min kang
 
Shell, merge, heap sort
Hyun Jin Moon
 
[데브루키]노대영_알고리즘 스터디
대영 노
 
amugona study 2nd
who7117
 
알고리즘 스터디(정렬) Seungdols
seungdols
 
[알고리즘 스터디 2주차]병합정렬/퀵정렬/힙정렬
Codingclub
 
2007 Icpc2
yonsei
 
[D2CAMPUS] Algorithm tips - ALGOS
NAVER D2
 
Data and Sorting Algoritm
Minsuk Lee
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
S.O.P.T - Shout Our Passion Together
 
알고리즘
승우 백
 
OnePointLesson PriorityQueue 우선순위 큐
KWANGIL KIM
 
알고리즘
Kwang-Hyun Park
 
Quick sort
HyungjunJu
 
2021 여름방학 정기 세미나 3주차
Moonki Choi
 
02. binary search tree
승혁 조
 
[Algorithm] Sorting Comparison
Bill Kim
 
Quick, Tree sort
Hyun Jin Moon
 
[11 0212] 정렬, 선택, 탐색 알고리즘
SeungMin Yang
 
컴퓨터개론09
Edward Hwang
 
Ad

More from ultrasuperrok (13)

PDF
시간 복잡도를 제대로 정리한 자료 입니다. 개발자분들 코딩 테스트 준비에 도움이 되길 바랍니다.
ultrasuperrok
 
PDF
[HBM-PPT]코딩 테스트 제대로 공부해서 합격하는 방법 강의자료 공유 합니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 16장 그리디를 강의한 자료 입니다. 영상도 있습니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
ultrasuperrok
 
PPTX
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
ultrasuperrok
 
PPTX
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 3주차 스터디 - 재귀
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
ultrasuperrok
 
PPTX
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
ultrasuperrok
 
시간 복잡도를 제대로 정리한 자료 입니다. 개발자분들 코딩 테스트 준비에 도움이 되길 바랍니다.
ultrasuperrok
 
[HBM-PPT]코딩 테스트 제대로 공부해서 합격하는 방법 강의자료 공유 합니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 16장 그리디를 강의한 자료 입니다. 영상도 있습니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
ultrasuperrok
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
ultrasuperrok
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
ultrasuperrok
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
ultrasuperrok
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
ultrasuperrok
 

코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다.

  • 1. 코딩테스트 합격자 되기 C++ 13장 정렬 저자 박경록
  • 2. 목차 - 정렬의 의미 - 정렬이 필요한 이유 - 삽입 정렬 - 머지 정렬 - 힙 정렬 - 우선순위 큐
  • 3. 정렬의 의미 - 데이터를 특정 기준에 따라 순서대로 배치 예를들면…. 오름차순(작은 값부터 큰 값으로), 내림차순(큰 값부터 작은 값으로) 1 4 3 1 3 4 4 3 1 오름차순 내림차순
  • 4. 코테 에서 정렬은 언제 필요한가? - 정렬된 상태에서 동작하는 알고리즘을 사용해야 하는 경우 => 이진 탐색 => 병합정렬의 병합 1 4 5 7 9 12 14 9 12 14 9 1 3 5 2 4 6 1 2 3 4 5 6 병합정렬의 병합 이진탐색
  • 5. 대표적인 정렬 알고리즘(삽입정렬) - 왼쪽은 정렬된 영역, 오른쪽은 비 정렬된 영역으로 나눠짐 - 정렬된 영역이 점점 확장되어 비 정렬된 영역이 없어지는 정렬 방법 - 비 정렬된 영역의 맨 앞의 원소를 정렬된 영역의 적절한 곳에 추가 비정렬 정렬 비정렬 정렬 정렬 삽입정렬 흐름 정렬 비정렬 맨 앞의 원소를 정렬 영역의 정렬 상태를 유지할수 있는 위치에 삽입 삽입정렬 규칙
  • 6. 삽입정렬 과정 1 5 2 3 1 5 2 3 현재 키 : 5 1 < 5 이므로 5는 현재 위치에 넣으면 됨 (결국 제자리) 1 5 3 현재 키 : 2 5 > 2 이므로, 5를 오른쪽으로 이동 1 5 3 현재 키 : 2 1 < 2 이므로 빈칸에 2 삽입 1 2 5 현재 키 :3 5 > 3 이므로 5를 오른쪽 이동 1 2 5 현재 키 :3 2 < 3 이므로 빈칸에 3 삽입 1 3 5 2 정렬 끝
  • 7. 삽입정렬의 BEST / WORST 케이스
  • 8. 대표적인 정렬 알고리즘(병합 정렬) - 리스트를 반으로 나누어 각각 정렬한 뒤, 합치는 방식 - 각 부분 리스트를 재귀적으로 정렬 - 최종적으로 정렬된 두 리스트를 합쳐서 전체 리스트 정렬
  • 9. 대표적인 정렬 알고리즘(병합 정렬, 흐름) 원소가 한개가 될 때 까지 반절로 계속 쪼갬 => 배열을 물리적으로 쪼개는게 아님 => 인덱스를 활용해서 쪼개진 것처럼 동작 정렬을 하면서 합침 => 어떻게 합칠것인지를 알아야 함
  • 10. 대표적인 정렬 알고리즘(병합 정렬,합치는 부분) 3 4 2 6 2 3 4 2 6 2 3 3 4 2 6 2 3 4 3 4 2 6 2 3 4 6
  • 11. 대표적인 정렬 알고리즘(힙정렬) 원본 데이터 힙 구축 (max_hepify) 힙 정렬 (heap sort) 데이터 삽입
  • 12. 대표적인 정렬 알고리즘(힙 정렬, 힙 이란) 부모노드가 자식노드보다 항상 크면 최대힙, 항상 작으면 최소힙
  • 13. 대표적인 정렬 알고리즘(힙 구축하기) max_heapify() 연산을 노드번호 N/2 부터 1 까지 차례대로 시행 max_heapify() 연산 1. 현재 노드와 자식 노드 비교(자식 노드가 없다면 연산 종료) 2. 현재 노드가 가장 크지(작지) 않다면, 가장 큰(작은) 자식 노드의 값과 swap 3. 맞바꾼 자식 노드 위치를 현재노드로 해서 1부터 반복
  • 14. 대표적인 정렬 알고리즘(힙정렬, max_heapify) 4번노드가 가장 큰 값, 부모노 드와 swap Max_heapify(4) 수행 maxheapify(2) 수행 heapify(9/2) -> heapify(1) 까지 차례대로 수행 하면 비정렬 데이터가 힙 구조로 완성됨(정렬된 상태) => N/2 부터 하는 이유는… N/2보다 큰 노드는 자식이 없으므로(부모인덱스 는 자식인덱스 *2 혹은 *2 +1) 8 7
  • 15. 대표적인 정렬 알고리즘(힙정렬) 1. 정렬되지 않은 데이터로 최대(소)힙 구축 2. 현재 최대(소)힙의 루트노드와 마지막 노드를 맞바꿈 3. 최대(소)힙 사이즈가 1이면 종료, 최대(소)힙 사이즈를 1 줄임, max_heapify(1) 수행.. 다시 2.로감
  • 16. 우선순위큐 기존 큐는 FIFO(First In First Out)로 동작 우선순위큐는 In 순서와 상관없이 우선순위가 높은 원소가 먼저 Out 됨
  • 17. 우선순위큐의 구현시 고려할 점 원소가 계속 들어오는 상황에서 정렬 상태를 유지 해야함 => 기존 대부분 정렬 방법은 O(NlogN) => 힙정렬을 사용할 경우 삽입/삭제시 O(logN) 보장 => 우선순위큐는 힙을 사용 코테에서 우선순위큐는 최단경로 알고리즘(다익스트라,밸만포드) 구현시 많이 사 용 됨
  • 18. STL에서 제공하는 우선순위큐 - 이미 STL에서 우선순위 큐를 제공함 - 기본적으로 최대힙으로 동작함 10 30 20 5 10 30 10 20 30 10 20 30 10 5 10, 30, 20, 5 순서대로 푸시 하는 경우 30, 20, 10, 5 순서대로 팝 됨(최대 힙)
  • 19. STL에서 제공하는 우선순위큐(실제 사용) - 우선순위를 따로 제공할수도 있음(사용자 정의타입은 필수) - 기본적으로 최대힙으로 동작함(큰 값이 먼저)
  • 20. 정렬의 구현 삽입 정렬 병합 정렬 힙 정렬
  • 22. 커뮤니티 소개(오픈카톡방) cont’d - 저자 직접 운영 - 대략 400명 정도 인원이 자유롭게 소통 - 개인적인 주제 및 코딩 관련 소통 가능
  • 24. 커뮤니티 소개(깃허브) cont’d - 책 문제의 정답코드 - 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘 - C++ 기본 문법 - STL의 성능 비교
  • 26. 커뮤니티 소개(디스코드) cont’d - 모각코 진행 - 공식 스터디 / 개인 스터디 모집 공고 및 진행 - 책 관련 문의 / 답변