gcc的版本是5.3.0开启编译优化-O2。java是1.8的server模式
a为a[10000]时java耗时50ms。c耗时75ms。
a为十万位是java耗时5秒,c耗时7.5秒。
为什么c会比java慢?有人试过吗?
c的冒泡
void BubbleSort(int a[]) { for(int i=0; i<len-1; i++) { for(int j=0; j<len-1-i; j++) { if(a[j]>a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } } }
java code
public static void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length - 1 - i; j++) { if (a[j] > a[j + 1]) { int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } }
下面是完整代码,同志们可以自己机子跑跑看。c的完整代码
#include <stdio.h> #include <stdlib.h> #include <sys/timeb.h> #define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));} int len; int main() { // int *a=malloc(300000000*sizeof(int)); // len=300000000; // int a[10000]; // GET_ARRAY_LEN(a,len); int *a=malloc(10000*sizeof(int)); len=10000; for(int i=0; i<len; i++) { a[i]=len-i; } //print(a); struct timeb startTime, endTime; ftime(&startTime); BubbleSort(a); ftime(&endTime); printf("%d \n",(endTime.time-startTime.time)*1000 + (endTime.millitm - startTime.millitm)); //print(a); } void BubbleSort(int a[]) { for(int i=0; i<len-1; i++) { for(int j=0; j<len-1-i; j++) { if(a[j]>a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } } } void print(int a[]) { for(int i=0; i<len; i++) { printf(" %d",a[i]); } printf("\n"); }
java 完整代码
public class Sort { public static void main(String[] args) { // int[] a = getData(500000000); int[] a = getData(10000); // print(a); long start = System.currentTimeMillis(); bubbleSort(a); System.out.println("use " + (System.currentTimeMillis() - start)); // print(a); } public static void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length - 1 - i; j++) { if (a[j] > a[j + 1]) { int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } } }
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
可能java编译器优化的更好。在leetcode上也时常看得到java的解法优于c/c++的解法。