[Algorithm] 정렬 알고리즘
in Tech-Stack on Algorithm
Contents
정렬
데이터를 정렬하는 이유는 원하는 값을 쉽게 찾기 위해서이다.
- 빅오 표기법(Big-O notation)
- 알고리즘의 시간 복잡도를 나타내는 표기법이며 $O(f(n))$ 으로 나타낸다.
- 시간 복잡도는 아래 순으로 퍼포먼스를 판단하며 값이 작을 수록 빠른 시간에 결과가 나온다.
- $O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) < O(nⁿ)$
- $O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) < O(nⁿ)$
선택 정렬 select sort
- 배열의 가장 작은 값을 가지는 인덱스를 찾아서 가장 작은 값을 앞에서부터 채워나가며 정렬하는 방식
- 시간 복잡도 : $O(n^2)$
- java로 구현하기
int[] arr = {8, 4, 6, 3, 5, 9, 1}; for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { // 맨 처음 index 부터 마지막 index까지 모든 값을 비교한다. if (arr[i] > arr[j]){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } }
버블 정렬 bubble sort
- 처음부터 끝까지 모든 데이터를 비교하면서 가장 큰 수를 맨 뒤로 보내는 정렬
- 시간 복잡도 : $O(n)$
- java로 구현하기
int[] arr = {8, 4, 6, 3, 5, 9, 1}; for (int i = arr.length - 1; i > 0 ; i--) { for (int j = 0; j < i; j++) { if (arr[j] > arr[j+1]) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } }
