【发布时间】:2013-03-26 16:51:03
【问题描述】:
我正在使用选择排序算法测试 Java 和 C++ 性能。
这是 Java 代码:
public static void main(String[] args) {
int[] mArray = new int[100000];
fillArrayRandomly(mArray, 10);
long timeStart = System.currentTimeMillis();
selectionSort(mArray);
long timeEnd = System.currentTimeMillis();
System.out.println((timeEnd - timeStart) + "ms");
}
public static void selectionSort(int[] array) {
for(int i=0; i<array.length-1; i++)
for(int j=i+1; j<array.length; j++)
if(array[j]<array[i])
swap(array, i, j);
}
public static void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
public static void fillArrayRandomly(int array[], int maxNum) {
Random generator = new Random();
for(int i=0; i<array.length; i++)
array[i] = generator.nextInt(maxNum);
}
public static void printArray(int array[]) {
for(int i=0; i<array.length; i++)
System.out.println(array[i]);
}
这是 C++ 代码:
void fillArrayRandomly(int *array, int dim, int max)
{
srand(time(NULL));
for(int i=0; i<dim; i++)
array[i] = rand() % max;
}
void selectionSort(int *array, int dim)
{
for(int i=0; i<dim-1; i++)
for(int j=i+1; j<dim; j++)
if(array[i] > array[j])
swap(array[i], array[j]);
}
int main()
{
int DIM = 100000;
int *array = new int[DIM];
fillArrayRandomly(array, DIM, 100);
long tStart = GetTickCount();
selectionSort(array, DIM);
long tEnd = GetTickCount();
cout << tEnd-tStart << " ms" << endl;
system("PAUSE");
}
这是包含 100000 个元素的数组的结果:
C++: 6584 毫秒
Java: 3942 毫秒
在我看来,这听起来很奇怪。 C++ 代码不应该比 Java 代码快吗?
你能帮我解决这个问题吗? 感谢和抱歉我的英语不好。
【问题讨论】:
-
您是否在编译 C++ 代码时启用了任何优化?
-
JVM 做了很多优化,在你的 C++ 代码优化方面可能有很多潜力。
-
我猜你没有开启优化。你会为 C++ 代码展示你的编译器选项吗?
-
FWIW C++ 代码在我的机器上比 Java 代码执行得更快(我打开了优化),但这并不意味着很多——您使用的代码在这两种语言中都没有特定的优势并且将执行大致相同的操作。这不是用于比较这些语言各自性能的有趣代码。
-
@The.Coder 你是在 VS 2012 中调试还是发布版本?
标签: java c++ sorting selection