2010-11-06 2 views
0

J'ai plusieurs méthodes de tri qui trient toutes le même tableau de 100 000 nombres aléatoires.Temps de calcul pour les méthodes de tri sur plusieurs tableaux

J'utilise la méthode suivante pour trouver les runtimes de chaque

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

Et ce qui suit pour le nombre aléatoire 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()); 

Comment puis-je modifier ce que je puisse avoir chacun d'entre eux trier 100 tableaux plutôt qu'un seul, et compte le temps de chaque tableau? Par exemple. Run1 - 23ms; Run2 - 25ms; ... Run100 - 22ms

EDIT: J'ai une dernière chose à faire. Ainsi, chaque itération trie le tableau de plusieurs façons, par exemple l'insertion, la fusion et le tri rapide. Donc disons insertion = 300ms, merge = 200ms, et quick = 100ms. Je dois, pour chaque itération, trouver la méthode la plus rapide. Je sais que c'est une chose de type min/max simple que vous faites mille fois dans les classes de programmation inférieures. Serait-il plus facile de lancer chaque valeur dans un tableau et d'utiliser un appel array.min? (Quoi qu'il en est réellement, nouvelle à la syntaxe Java ..)

+0

Mettez votre code dans une boucle? – AbdullahC

+0

C'est l'idée générale, mais si je savais comment l'implémenter complètement, je n'aurais pas posté ici! –

Répondre

1

Actuellement, il semble que vous créiez la matrice, puis que vous procédiez à un tri répétitif à l'aide de différentes fonctions.

Vous avez simplement besoin de mettre tout cela en boucle.

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> */ 
} 

Vous pouvez utiliser l'index run lors de l'impression sur vos résultats.

+0

Parfait, c'est ce que je viens de faire. –

0

Vous serait probablement en train de faire quelque chose comme:

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 
} 

vous auriez encore besoin de l'initialisation au préalable. Je suppose que je ne sais pas pourquoi le tableau est cloné avant d'être trié. Pouvez-vous trier directement ce tableau?

+0

Il est cloné pour que toutes les autres méthodes trient le même tableau. J'ai plusieurs pas seulement l'insertion. Fusionner, heap, shell, etc. –