Время работы для методов сортировки над многосперскими массивами
-
29-09-2019 - |
Вопрос
У меня есть различные методы сортировки, которые сортируют одинаковые 100 000 случайных чисел.
Я использую следующий метод, чтобы найти время выполнения каждого
long insertionStart = System.currentTimeMillis();
arr.Clone(iniArr);
arr.insertionSort();
long insertionFinal = System.currentTimeMillis() - insertionStart;
И следующее для случайного номера в сети
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 мс
РЕДАКТИРОВАТЬ:У меня есть одна последняя вещь. Таким образом, каждая итерация сортирует массив несколько способов, скажем, вставка, объединение и быстрые сортировки. Таким образом, скажем, вставка = 300 мс, Merge = 200 мс и быстрых = 100 мс. Мне нужно, для каждой итерации, найдите, какой метод сортировал самый быстрый.
Я знаю, что это простая вещь типа Min/Max, которую вы делаете тысячу раз в более низких классах программирования. Было бы легче бросить каждое значение в массив и использовать массив. (Что бы это ни было, новичок в синтаксисе Java ..)
Решение
В настоящее время похоже, что вы создаете массив, а затем многократно сортируете с помощью разных функций.
Вам просто нужно поместить все это в петлю.
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
При печати ваших результатов.
Другие советы
Вы, наверное, будете делать что -то вроде:
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
}
Тебе до сих пор нужна инициализация заранее. Я думаю, я не знаю, почему массив клонирован до того, как он сортируется. Вы можете напрямую отсортировать этот массив?