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왜 자바가 더 빠른지 설명 좀
같은 알고리즘인지 확인먼저 해보는게 ㅇㅅㅇ
속도 비교보다 일단 srand도 없고 return *(int *)pa - *(int *)pb;로도 원하는 작업이 될테고
자바는 애초에 처 느려서 코드길이 비교는 의미가 없지
허허....ㅋㅋㅋ - dc App