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;
}
}
}
}
}
可能java编译器优化的更好。在leetcode上也时常看得到java的解法优于c/c++的解法。