Время выполнения методов сортировки по нескольким массивам - PullRequest
0 голосов
/ 06 ноября 2010

У меня есть различные методы сортировки, которые сортируют один и тот же массив из 100 000 случайных чисел.

Я использую следующий метод, чтобы найти время выполнения каждого

long insertionStart = System.currentTimeMillis();
   arr.Clone(iniArr);
   arr.insertionSort();
   long insertionFinal = System.currentTimeMillis() - insertionStart;

и следующее для случайного числа arrary

int maxSize = 100000;  // array size
   Sortarr arr, iniArr;         // reference to array
   arr = new Sortarr(maxSize);  // create the array
   iniArr = new Sortarr(maxSize);

   // insert random numbers
   Random generator = new Random();
   for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

Как я могу изменить это так, чтобы каждый из них мог отсортировать 100 массивов, а не только один, и считать время каждого массива? Например. Run1 - 23 мс; Run2 - 25мс; ... Run100 - 22мс

EDIT: У меня есть одна последняя вещь, которую нужно сделать. Таким образом, каждая итерация сортирует массив несколькими способами, например, вставкой, слиянием и быстрой сортировкой. Скажем, вставка = 300 мс, объединение = 200 мс и быстрое = 100 мс. Мне нужно для каждой итерации найти, какой метод отсортирован быстрее всего.

Я знаю, что это простая вещь типа min / max, которую вы делаете тысячу раз в низших классах программирования. Будет ли проще бросить каждое значение в массив и использовать вызов array.min? (Что бы это ни было на самом деле, новшество в синтаксисе Java ..)

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

В настоящее время похоже, что вы создаете массив, а затем многократно сортируете его с использованием различных функций.

Вам просто нужно поместить все это в цикл.

int maxRuns = 100;

int maxSize = 100000;  // array size

for (int run=0; run<maxRuns; run++) {   
    Sortarr arr, iniArr;         // reference to array
    arr = new Sortarr(maxSize);  // create the array
    iniArr = new Sortarr(maxSize);

    // insert random numbers
    Random generator = new Random();
    for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

    long insertionStart = System.currentTimeMillis();
    arr.Clone(iniArr);
    arr.insertionSort();
    long insertionFinal = System.currentTimeMillis() - insertionStart;
    /* <more code goes here> */
}

Вы можете использовать индекс run при печати результатов.

0 голосов
/ 06 ноября 2010

Вы, вероятно, будете делать что-то вроде:

for (int try = 0; try < 100; try++) {
   iniArr = new Sortarr(maxSize);

   // insert random numbers
   Random generator = new Random();
   for (int i = 0; i < maxSize; i++) iniArr.insert(generator.nextInt());

   long insertionStart = System.currentTimeMillis();
   arr.Clone(iniArr);
   arr.insertionSort();
   long insertionFinal = System.currentTimeMillis() - insertionStart;

   // print out the time, and/or add up the total
}

вам все равно понадобится инициализация заранее. Я думаю, я не знаю, почему массив клонируется, прежде чем он будет отсортирован. Вы можете напрямую отсортировать этот массив?

...