2010-11-06 3 views
0

У меня есть различные методы сортировки, которые сортируют один и тот же 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 - 23ms; Run2 - 25ms; ... Run100 - 22ms

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

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

+0

Введите код, который вы видите на картинке. – AbdullahC

+0

Это общая идея, но если бы я знал, как ее полностью реализовать, я бы не разместил здесь! –

ответ

1

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

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

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

Отлично, вот что я только что сделал. –

0

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

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 
} 

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

+0

Он клонирован так, что все остальные методы сортируют один и тот же массив. У меня многократная не только вставка. Слияние, куча, оболочка и т. Д. –