카테고리
태그
Algorithm AWS Backend C,C++ cloud computing Computer Science concept Concept Data Structure Database EC2 Frameworks Game global top 100 Gradle Hash Infrastructure Inversion Of Control JAVA Java JPA JWT Network OCI OOP Operating System Programming Basics Programming Language Projects Retrospect Security Sort Spring Spring IOC SpringBoot Study Tomcat TroubleShooting Web basics Web Basics 글쓰기 사색
308 단어
2 분
[ Algorithm ] Quick Sort(퀵 정렬)
Quick Sort
- 실무에서 가장 많이 사용하는 정렬
- 일반적 / 범용적으로 가장 빠름
- 진정한 분할 정복 알고리즘
- 모든 요소를 방문함(decrease - and-counquer와의 차이)
- 복잡도에 log가 있다는 것에서 알 수 있음
- 어떤 값(pivot)을 기준으로 목록을 하위 목록으로 2개로 나눔
- 목록을 나누는 기준은 pivot보다 작냐/크냐
- 이 과정을 재귀적으로 반복
- 재귀 단계가 깊어질 때마다 새로운 pivot 값을 뽑음
- pivot과 교환이 동일하지 않게 이동, 인덱스도 생각해야 해서 복잡하게 느껴질 수 있음
- 평균 수행 시간: O(NlogN)
- 최악 수행 시간: O(N^2)
- 메모리(공간 복잡도): O(logN)
- 안정성: X
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, high);
return i + 1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
[ Algorithm ] Quick Sort(퀵 정렬)
https://blog-full-of-desire-v3.vercel.app/posts/algorithm/-algorithm--quick-sort-/