반응형
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
- linux
- 코리안챔버오케스트라
- Upstream
- Dreamhack
- 위상 정렬
- 예술의 전당
- 자바
- 진입차수
- React
- 백엔드
- 동적 프로그래밍
- 알고리즘
- 우아한테크코스
- 커밋메시지
- 트랜스포트 계층
- 웹개발
- 네트워크 계층
- 선우예권
- 깃
- 서울청년문화패스
- 비동기 처리
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- c
- 애플리케이션 계층
- 우테코
- 프리코스
- 깃헙
- 다이나믹 프로그래밍
- webhacking
- jsx
Archives
- Today
- Total
yon11b
제자리 퀵 정렬 본문
반응형
Alg inPlaceQuickSort(L,l,r)
if (l>=r)
return
k <- l과 r 사이의 임의의 수 [pivot]
a,b <- inplacePartition(L,l,r,k)
inPlaceQuickSort(L,l,a-1)
inPlaceQuickSort(L,b+1,r)
<inPlacePartition>
- 무작위로 피봇을 정한다.
- 피봇을 맨 끝으로 보낸다.
- 피봇과 나머지 배열 원소들과 크기 비교를 한다.
- 이 때 효율성을 높이기 위해서(?) 왼쪽에서 오른쪽으로만 탐색하는 것이 아니라, 왼쪽에서 오른쪽으로 탐색하는 것 하나(i), 오른쪽에서 왼쪽으로 탐색하는 것 하나(j) 이렇게 동시에 두 개가 탐색하도록 한다.
- 전제 조건: ( i≤j )
- 왼쪽 → 오른쪽 탐색: i
- A[i]가 피봇보다 작다면 i를 증가시키고(잘 정렬되어 있으므로 그 다음 단계로 넘어간다는 뜻)
- A[i]가 피봇보다 크다면 while문을 뛰쳐 나온다. (j와의 교환이 시급하다는 뜻)
- 오른쪽 → 왼쪽 탐색: j
- A[j]가 피봇보다 크다면 j를 감소시키고(잘 정렬되어 있으므로 그 다음 단계로 넘어간다는 뜻)
- A[j]가 피봇보다 작다면 while문을 뛰쳐 나온다.(i와의 교환이 시급하다는 뜻)
- 왼쪽 → 오른쪽 탐색: i
- 교환을 해야 할 원소들끼리 교환을 한다.
- A[i] ↔ A[j]
- i≤j 라면, 다시 3번 과정으로 돌아간다.
- 모두 정렬이 끝나서 i를 기준으로 왼쪽은 피봇보다 작은 원소들이고 i를 포함한 오른쪽은 피봇보다 큰 원소들이 되었다면, r번째에 있는 피봇과 i번째에 있는 원소를 교환한다.
- i를 리턴한다.
728x90
'언어 > C' 카테고리의 다른 글
위상 정렬 문제 C (0) | 2022.12.03 |
---|---|
그래프 구현하다가 삽질한 내용들 정리 (0) | 2022.11.19 |
Big-oh 계산법 (0) | 2022.05.17 |
연결리스트 (0) | 2022.05.02 |
달팽이 배열 (0) | 2022.03.30 |