2017-10-18 3 views
1

J'essaie de faire en sorte que je génère un tableau aléatoire mais que j'implémente juste ce même tableau (dans l'ordre aléatoire) avec des sortes différentes. J'ai:utilise la même matrice aléatoire pour chaque sorte

public static void main(String[] args) 
{ 
    int[] array = new int[10]; 
    for(int i = 0; i < array.length; i++) { 
     array[i] = (int)(Math.random()*100);} 

    System.out.println("\nBefore Bubble Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 

    bubbleSort(array); 


    System.out.println("After Bubble Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 
    System.out.println("\n"); 

    System.out.println("\nBefore Insertion Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 

    insertionSort(array); 


    System.out.println("After Insertion Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 
    System.out.println("\n"); 
} 

Avec le code correspondant pour les sortes (je les posterai si nécessaire). Sa sortie est:

Array Before Bubble Sort: 
2 64 27 1 81 60 72 6 9 82 
Array After Bubble Sort: 
1 2 6 9 27 60 64 72 81 82 

Array Before Insertion Sort: 
1 2 6 9 27 60 64 72 81 82 
Array After Insertion Sort: 
1 2 6 9 27 60 64 72 81 82 

Je veux ce tableau 2 64 27 1 81 60 72 6 9 82 d'être dans la ligne avant d'insertion ainsi. Le tableau trié du tri à bulles est simplement mis dans le tri par insertion donc il ne fait rien. Je pense que je dois faire une méthode pour le tableau aléatoire et l'appeler avec chaque sorte? Comment ferais-je cela? Ou toute autre solution que j'apprécierais. Je vais éditer avec plus d'informations si nécessaire.

+1

Utilisez ['System.arraycopy'] (https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#arraycopy-java.lang.Object-int-java. lang.Object-int-int-) pour copier votre tableau dans un 'fixture' et copier ce dernier avant chaque exécution de tri. –

Répondre

2

Clonez ou copiez le tableau avant chaque tri et transmettez le clone à la routine de tri. Vous pouvez utiliser array.clone() ou Arrays.copyOf(array, array.length) pour effectuer la copie.

public static void main(String[] args) 
{ 
int[] array = new int[10]; 
    for(int i = 0; i < array.length; i++) { 
    array[i] = (int)(Math.random()*100);} 

    System.out.println("\nBefore Bubble Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 

    int[] sorted = array.clone(); 
    bubbleSort(sorted); 


    System.out.println("After Bubble Sort: "); 
    for (int element : sorted) 
     System.out.print(element + " "); 
     System.out.println("\n"); 

    System.out.println("\nBefore Insertion Sort: "); 
    for (int element : array) 
     System.out.print(element + " "); 

    sorted = array.clone(); 
    insertionSort(sorted); 


    System.out.println("After Insertion Sort: "); 
    for (int element : sorted) 
     System.out.print(element + " "); 
    System.out.println("\n"); 
} 
+0

Ok merci ce travail. Cependant, il semble autre chose que le tri des bulles, quand j'essaie de compter les comparaisons et les swaps, cela compte comme des swaps 0 pour le tri par insertion. Donc, il est "magiquement" trié sans permuter et juste imprimer la liste triée. Est-ce que tu sais pourquoi? – vee

+0

@vee - Je suppose que vous ne recliquez pas le tableau. Voir ma réponse mise à jour, où j'ai remplacé le '// etc 'avec du code explicite. –

0

Vous devez faire une copie du tableau initial afin de maintenir les mêmes données que l'original.