C ++ против Java — выборка сортировки

Я тестирую производительность 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 мс

Джава: 3942 мс

Это звучит довольно странно, на мой взгляд. Разве код C ++ не должен быть быстрее, чем код Java?

Можете ли вы помочь мне решить эту проблему?
Спасибо и извините за мой плохой английский.

-4

Решение

Для начала, ваш java-код генерирует случайные числа только до 10, а c ++ до 100, очевидно, будет больше перестановок … обычно для такого типа тестирования вы хотите протестировать EXACT-тот же массив …

7

Другие решения

Где твой своп с ++? > вы используете template std::swap(T&x,T&y)? Этот шаблон лучше всего подходит для «больших» типов с конструктором перемещения и назначением. Попробуйте использовать один als в вашем java-тесте, используя индексы.

0

По вопросам рекламы [email protected]