정렬 알고리즘 | 최선 시간 복잡도 | 평균 시간 복잡도 | 최악 시간 복잡도 |
---|---|---|---|
버블 정렬 (Bubble Sort) | O(n) | O(n^2) | O(n^2) |
선택 정렬 (Selection Sort) | O(n^2) | O(n^2) | O(n^2) |
삽입 정렬 (Insertion Sort) | O(n) | O(n^2) | O(n^2) |
합병 정렬 (Merge Sort) | O(n log n) | O(n log n) | O(n log n) |
퀵 정렬 (Quick Sort) | O(n log n) | O(n log n) | O(n^2) |
힙 정렬 (Heap Sort) | O(n log n) | O(n log n) | O(n log n) |
셸 정렬 (Shell Sort) | O(n log n) | O(n^(3/2)) | O(n^2) |
기수 정렬 (Radix Sort) | O(nk) | O(nk) | O(nk) |
계수 정렬 (Counting Sort) | O(n + k) | O(n + k) | O(n + k) |
버킷 정렬 (Bucket Sort) | O(n + k) | O(n + k) | O(n^2) |
Timsort는 실제 데이터에서 매우 효율적이며, 특히 거의 정렬된 데이터에 대해 뛰어난 성능을 발휘한다. 또한, Timsort는 안정 정렬(Stable Sort)이므로 동일한 값의 요소들이 원래의 순서를 유지한다.
팀소트(Timsort)는 수많은 종류의 실세계 데이터에 잘 수행하도록 설계된 하이브리드형 안정 정렬 알고리즘의 하나이다. 합병 정렬과 삽입 정렬이 기원이다. 2002년 파이썬 프로그래밍에 사용하기 위해 팀 피터스가 구현했다. 팀소트는 버전 2.3부터 파이썬의 표준 정렬 알고리즘이다.
장점
내장 정렬 함수인 sorted()
와 list.sort()
를 사용
# 정렬할 리스트
array = [5, 2, 9, 1, 5, 6]
# list.sort() 사용
array.sort()
print(array) # [1, 2, 5, 5, 6, 9]
# 또는 sorted() 사용
sorted_array = sorted(array)
print(sorted_array) # [1, 2, 5, 5, 6, 9]
Java의 Arrays.sort()
및 Collections.sort()
를 사용
Arrays.sort()
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = {5, 2, 9, 1, 5, 6};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // [1, 2, 5, 5, 6, 9]
}
}
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Integer[] array = {5, 2, 9, 1, 5, 6};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // [1, 2, 5, 5, 6, 9]
}
}
Collections.sort()
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Collections.addAll(list, 5, 2, 9, 1, 5, 6);
Collections.sort(list);
System.out.println(list); // [1, 2, 5, 5, 6, 9]
}
}
자바와 파이썬의 내장 소트 정렬이 팀정렬 기반 알고리즘이었군요..! 자주 사용하는데 몰랐네요
알고리즘 동작 방식도 체크해봐야겠습니다