Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 제네릭
- 티스토리꾸미기
- CSS
- returnType
- javascript
- Chart.js
- 성능최적화
- 리액트
- NonNullable
- typescript
- 누구나 자료구조와 알고리즘
- 타입좁히기
- 공통컴포넌트
- React Native
- 폰트적용하기
- 커스텀
- 반복줄이기
- react
- reactjs
- 개발콘텐츠
- 타입스크립트
- click and drag
- 레이아웃쪼개기
- TSDoc
- utilty type
- React.js
- 2022
- JS console
- const 단언문
- vue.js
Archives
- Today
- Total
몽땅뚝딱 개발자
누구나 자료구조와 알고리즘 - (10) 퀵 정렬(Quicksort) 본문
퀵 정렬(Quicksort)
버블 정렬, 선택 정렬, 삽입 정렬같은 알고리즘이 있지만 대부분의 언어에서는 퀵 정렬(Quicksort)를 선택한다.
퀵 정렬은 매우 빠른 정렬 알고리즘으로 평균 시나리오에서 효율적이다. 최악의 시나리오에서는 삽입 정렬, 선택 정렬과 성능이 유사하지만 대부분의 경우의 평균 시나리오에서는 훨씬 빠르다.
1.1. 퀵 정렬의 분할
퀵 정렬은 분할이라는 개념에 기반한다.
배열을 분할 한다는 것은 배열로부터 임의의 수인 피벗(pivot)을 가져와 피벗보다 작은 모든 수는 피벗의 왼쪽에, 피벗보다 큰 모든 수는 피벗의 오른쪽에 둔다.
1. 여기서 3을 피벗으로 지정하고 두 개의 포인터를 사용한다.
0 pointer1 |
5 |
2 |
1 |
6 pointer2 |
3 pivot |
2. 왼쪽 포인터를 한 셀씩 계속 오른쪽으로 옮기면서 피벗보다 크거나 같은 값에 도달하면 멈춘다.
0 |
5 pointer1 |
2 |
1 |
6 pointer2 |
3 pivot |
3. 오른쪽 포인터를 한 셀씩 계속 왼쪽으로 옮기면서 피벗보다 작거나 같은 값에 도달하면 멈춘다.
0 |
5 pointer1 |
2 |
1 pointer2 |
6 |
3 pivot |
4. 둘을 교환한다.
0 |
1 |
2 |
5 |
6 |
3 pivot |
5. 교환하다가 왼쪽 포인터가 오른쪽 포인터에 도달하면 이동을 중지하고 왼쪽값과 피벗을 교환한다.
0 |
1 |
2 |
3 pivot |
6 |
5 |
분할이 끝나면 피벗 왼쪽에 있는 값은 모두 피벗보다 작고 피벗 오른쪽에 있는 값은 모두 피벗보다 크다고 확신할 수 있다.
1.2. 퀵 정렬
- 퀵 정렬은 분할과 재귀로 이뤄진다. 피벗의 왼쪽과 오른쪽에 있는 하위 배열을 각각 또 다른 배열로 보고 1단계와 2단계를 재귀적으로 반복하는 것이다.
- 퀵 정렬은 새로운 빅 오 카테고리로 O(NlogN) 알고리즘이다. (원소가 N개 일 때 원소가 2배로 늘어날 때 마다 필요한 단계수가 한 단계씩 늘어나기 때문에 N x logN이다.) 이 알고리즘은 가장 빠른 정렬 알고리즘이다.
- 많은 알고리즘에서 정렬을 더 큰 프로세스의 일부로 사용한다. 그러면 최소 O(NlogN) 알고리즘까지 도달할 수 있다.
출처
제이 웹그로우, 누구나 자료구조와 알고리즘 (길벗, 2021)
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > 알고리즘' 카테고리의 다른 글
⭐️ 누구나 자료구조와 알고리즘 - (12) 노드 기반 자료구조: 트리(Tree) - 힙(Heap), 트라이(trie) (0) | 2023.10.01 |
---|---|
누구나 자료구조와 알고리즘 - (11) 노드 기반 자료구조: 연결 리스트 (0) | 2023.09.29 |
누구나 자료구조와 알고리즘 - (9) 재귀 (0) | 2023.09.28 |
누구나 자료구조와 알고리즘 - (8) 스택과 큐 (0) | 2023.09.28 |
누구나 자료구조와 알고리즘 - (7) 해시 테이블 (0) | 2023.09.28 |
Comments