반응형
퀵정렬이란 ?
Divide-and-Conquer paradigm을 사용 Partitioning 이용
|
수도코드
QuickSort(A[], p, r) {
if(p<r) then{
q = partition(A, p, r);
QuickSort(A, p, q-1);
QuickSort(A, q+1, r);
}
}
partition(A[], p, r) {
배열 A[p...r]의 원소들을 A[r]을 기준으로 양쪽으로 재배치하고
A[r]이 자리한 위치를 return
}
소스
1. 처음 퀵소트는 1차적으로 중간지점을 선택
2. 처음 정렬이 끝나면 PIVOT의 위치를 리턴
3. PIVOT의 위치를 기점으로 좌, 우로 재귀적호출
- PIVOT의 위치를 기점으로 왼쪽에는 PIVOT보다 작은값, 오른쪽에는 PIVOT보다 큰값들이 정렬 되어있기때문
실행예시
1. 피봇을 설정(2)
2. 왼쪽부터 차례대로 피봇보다 큰수가 있는지 탐색 ( 2보다 큰 9를 찾음)
3. 오른쪽부터 차례대로 피봇보다 작거나 같은값이 있는지 탐색 (2와 같은 2를 찾음)
4. 찾았다면 위치를 바꾸어준다. ( 2와 9 교환)
5. left가 right보다 작은동안 2~4번작업을 반복
6. 정렬이 완료될때까지 1~5 반복
반응형
'컴퓨터공학 기초 > 알고리즘' 카테고리의 다른 글
[알고리즘] 이진탐색트리(BST) 란 ? (0) | 2020.02.09 |
---|---|
[알고리즘] 너비우선탐색(BFS) 이란 ? (0) | 2020.02.07 |
[알고리즘] 깊이우선탐색(DFS)이란 ? (0) | 2020.02.05 |
[알고리즘] 스택(Stack)이란 ? (0) | 2020.02.03 |
[알고리즘] 버블정렬이란 ? (0) | 2020.02.01 |
댓글