C 코드:

// sort.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define LENGTH 10000000 int cmpint (const void *pa, const void *pb) { int a = *(int*)pa; int b = *(int*)pb; return a < b ? -1 : a == b ? 0 : 1; } int main (void) { int *arr = malloc(LENGTH * sizeof(int)); for (int i = 0; i < LENGTH; i++) { arr[i] = rand(); } clock_t start = clock(); qsort(arr, LENGTH, sizeof(int), cmpint); double t = (double)(clock() - start) / CLOCKS_PER_SEC; printf("qsort: %fs\n", t); return 0; } // gcc sort.c -o sort -O3 -march=native && ./sort // qsort: 1.417313s


자바 코드:

// Sort.java import java.util.Arrays; public class Sort { private static final int LENGTH = 10000000; public static void main(String[] args) { int[] arr = new int[LENGTH]; for (int i = 0; i < LENGTH; i++) { arr[i] = (int) Math.random(); } long start = System.nanoTime(); Arrays.sort(arr); double t = (System.nanoTime() - start) / 1000000000.0; System.out.println("Arrays.sort: " + t + "s"); int prev = arr[0]; for (int i = 1; i < LENGTH; i++) { assertTrue(prev <= arr[i]); } System.out.println("Assertion passes"); } private static void assertTrue (Boolean bool) { if(!bool) { throw new RuntimeException("Assertion failed"); } } } // Arrays.sort: 0.013825932s // Assertion passes


왜 자바가 더 빠른지 설명 좀