public static void sort(int[] a)
public static void sort(Object[] a)
public static void main(String[] args) { // 0.009 Dual-Pivot Quick
Random random = new Random(System.nanoTime());
int[] arr = new int[50000];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(50000);
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
i--;
}
}
}
long start, end;
start = System.currentTimeMillis();
Arrays.sort(arr);
end = System.currentTimeMillis();
System.out.println((end - start) / 1000.0);
}
public static void main(String[] args) { // 0.021초 Tim sort
Random random = new Random(System.nanoTime());
Integer[] arr = new Integer[50000];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(50000);
for (int j = 0; j < i; j++) {
if (arr[i].equals(arr[j])) {
i--;
}
}
}
long start, end;
start = System.currentTimeMillis();
Arrays.sort(arr);
end = System.currentTimeMillis();
System.out.println((end - start) / 1000.0);
}
Java Collection Framework에 속한 Arrays.sort()의 구현체에 대해서 알아보았다.
Merge sort는 O(n log n)의 속도를 가진다고 알려져 있지만 실제로 그보다 느려 대부분 Quick sort를 사용하고 있다.
하지만 JDK에서는 기본 정렬 알고리즘으로 Merge sort + Insertion sort인 Tim sort를 택했고 그에 대해서도 알게되었다.
정렬 알고리즘들은 실제로 구현할 일은 별로 없지만 왜 그런 알고리즘들을 택했는지에 대해서는 알 수 있다.