728x90
반응형
퀵 정렬 알고리즘
퀵 정렬(Quick Sort) 알고리즘은 원소들 중에서 특정한 기준을 피봇(Pivot)라고 부르며
피봇보다 작은 원소는 왼쪽으로 큰 원소는 오른쪽으로 이동한다.
초기 세팅 변수 left = 0 , rigth = 배열 길이-1 , pivot = (left+right)/2 (피봇은 중앙값으로 세팅함)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
public class Quick_Sort {
public static void main(String[] args) {
int[] arr = { 10, 50, 80, 90, 70 };
quick_Sort(arr, 0, arr.length - 1);
output(arr);
}
private static void quick_Sort(int[] arr, int start, int end) {
int left = start;
int right = end;
/*pivot을 중앙 값으로 셋팅*/
int pivot = arr[(left + right) / 2];
do {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
} while (left <= right);
if (start < right) {
quick_Sort(arr, start, right);
}
if (end > left) {
quick_Sort(arr, left, end);
}
}
private static void output(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
퀵 정렬 성능 향상 방법
- 작은 데이터 구간에는 삽입 정렬을 사용하여 퀵 정렬의 재귀의 깊이를 줄여 스택 사용을 줄여 준다
- 비 재귀 구현
- 난수(Random) 분할 > Worst 경우 인 정렬된 배열과 역순 배열일 때 문제를 해결하기 위해 난수로 선택한다
- 메디안 퀵 정렬(Median of Three QuickSort) - 세 값(처음, 가운데, 끝)의 중윗값을 찾아 Pivot으로 선택한다
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 삽입정렬 (Insertion Sort) Java Example (0) | 2019.06.16 |
---|---|
[알고리즘] 선택정렬 (Selection Sort) Java Example (0) | 2019.06.16 |
[알고리즘] 합병정렬/병합정렬 (Merge Sort) Java Example (0) | 2019.06.16 |
[알고리즘] 이진탐색 (Binary Search) Java Example (0) | 2019.06.16 |
[알고리즘] 알고리즘(algorithm)이란 ? (0) | 2019.06.16 |