web-dev-qa-db-fra.com

Trier un tableau dans Java

J'essaie de faire un programme qui se compose d'un tableau de 10 entiers qui ont tous une valeur aléatoire, jusqu'ici tout va bien.

Cependant, je dois maintenant les trier par ordre décroissant, puis les imprimer à l'écran, comment procéder?

(Désolé d'avoir autant de code pour un programme aussi petit, je ne suis pas si bon avec les boucles, je viens juste de commencer à travailler avec Java)

public static void main(String args[])
{
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" " 
    + array[8]+" " + array[9] );        

}
159
Lukas

Les boucles sont également très utiles, notamment lors de l’utilisation de tableaux,

int[] array = new int[10];
Random Rand = new Random();
for (int i = 0; i < array.length; i++)
    array[i] = Rand.nextInt(100) + 1;
Arrays.sort(array);
System.out.println(Arrays.toString(array));
// in reverse order
for (int i = array.length - 1; i >= 0; i--)
    System.out.print(array[i] + " ");
System.out.println();
195
Peter Lawrey

Ajoutez la ligne avant println et votre tableau est trié

Arrays.sort( array );
183
rauschen

Cela peut vous aider à comprendre les boucles en vous mettant en œuvre. Voir le type de bulle est facile à comprendre:

public void bubbleSort(int[] array) {
    boolean swapped = true;
    int j = 0;
    int tmp;
    while (swapped) {
        swapped = false;
        j++;
        for (int i = 0; i < array.length - j; i++) {
            if (array[i] > array[i + 1]) {
                tmp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = tmp;
                swapped = true;
            }
        }
    }
}

Bien sûr, vous ne devriez pas l'utiliser en production car il existe des algorithmes plus performants pour les grandes listes telles que QuickSort ou MergeSort qui sont implémentés par Arrays.sort(array)

39
isah

Jetez un oeil à Arrays.sort ()

23
uzilan

J'étais paresseux et a ajouté les boucles

import Java.util.Arrays;


public class Sort {
    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+1));
        }
        Arrays.sort( array );
        for ( int i = 0 ; i < array.length ; i++ ) {
            System.out.println(array[i]);
        }
    }
}

Votre tableau a une longueur de 10. Vous avez besoin d'une variable (i) qui prend les valeurs de 0to 9.

for ( int i = 0  ; i < array.length ;   i++ ) 
       ^               ^                   ^
       |               |                   ------  increment ( i = i + 1 )
       |               |
       |               +-------------------------- repeat as long i < 10
       +------------------------------------------ start value of i


Arrays.sort( array );

Est une méthode de bibliothèque qui trie les tableaux.

20
stacker
Arrays.sort(yourArray)

fera le travail parfaitement

16
Guillaume Slashy

Voir ci-dessous, il vous donnera triés par ordre croissant et décroissant les deux

import Java.util.Arrays;
import Java.util.Collections;

public class SortTestArray {

/**
 * Example method for sorting an Integer array
 * in reverse & normal order.
 */
public void sortIntArrayReverseOrder() {

    Integer[] arrayToSort = new Integer[] {
        new Integer(48),
        new Integer(5),
        new Integer(89),
        new Integer(80),
        new Integer(81),
        new Integer(23),
        new Integer(45),
        new Integer(16),
        new Integer(2)
    };

    System.out.print("General Order is    : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort);

    System.out.print("\n\nAscending Order is  : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort, Collections.reverseOrder());
    System.out.print("\n\nDescinding Order is : ");
    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }

}


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    SortTestArray SortTestArray = new SortTestArray();
    SortTestArray.sortIntArrayReverseOrder();
}}

La sortie sera

General Order is    : 48 5 89 80 81 23 45 16 2 

Ascending Order is  : 2 5 16 23 45 48 80 81 89 

Descinding Order is : 89 81 80 48 45 23 16 5 2 

Remarque: Vous pouvez utiliser Math.ranodm au lieu d’ajouter des nombres manuels. Faites-moi savoir si j'ai besoin de changer le code ...

Bonne chance ... A bientôt !!!

7
Fahim Parkar

juste pour votre information, vous pouvez maintenant utiliser Java 8 nouvelle API pour trier tout type de tableau à l'aide de parallelSort

parallelSort utilise le cadre Fork/Join introduit dans Java 7 pour attribuer les tâches de tri à plusieurs threads disponibles dans le pool de threads.

les deux méthodes pouvant être utilisées pour trier int tableau,

parallelSort(int[] a)
parallelSort(int[] a,int fromIndex,int toIndex)
6
Sufiyan Ghori

Voici comment l'utiliser dans votre programme:

public static void main(String args[])
{
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    Arrays.sort(array); 

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" " 
    + array[8]+" " + array[9] );        

}
6
CloudyMarble

Pour l'ordre naturel: Arrays.sort(array)

Pour reverse Order: Arrays.sort(array, Collections.reverseOrder()); -> Il s’agit d’une méthode statique dans la classe Collections qui appelle ensuite une classe interne pour renvoyer un comparateur inversé.

6
AalekhG
int[] array = {2, 3, 4, 5, 3, 4, 2, 34, 2, 56, 98, 32, 54};

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array.length; j++) {
        if (array[i] < array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}
6
Garrett O'Grady

Vous pouvez trier un tableau int avec Arrays.sort( array ).

5
x4u

Java 8 offre la possibilité d'utiliser des flux permettant de trier int[] array comme suit:

int[] sorted = Arrays.stream(array).sorted().toArray(); // option 1
Arrays.parallelSort(array); //option 2

Comme mentionné dans doc pour parallelSort:

L'algorithme de tri est une fusion de tri parallèle qui divise le tableau en sous-tableaux qui sont eux-mêmes triés puis fusionnés. Lorsque la longueur du sous-tableau atteint une granularité minimale, le sous-tableau est trié à l'aide de la méthode Arrays.sort appropriée. Si la longueur du tableau spécifié est inférieure à la granularité minimale, il est trié à l'aide de la méthode Arrays.sort appropriée. L'algorithme nécessite un espace de travail ne dépassant pas la taille du tableau d'origine. Le pool commun ForkJoin est utilisé pour exécuter toutes les tâches parallèles.

Donc, si le tableau en entrée est inférieur à la granularité (8192 éléments dans Java 9 et 4096 dans Java 8 je crois), alors parallelSort appelle simplement un algorithme de tri séquentiel.

Juste au cas où nous voudrions trier le tableau d’entiers en ordre inverse, nous pouvons utiliser le comparateur comme:

int[] reverseSorted = IntStream.of(array).boxed()
                        .sorted(Comparator.reverseOrder()).mapToInt(i -> i).toArray();

Puisque Java ne dispose d'aucun moyen de trier les primitives avec un comparateur personnalisé, nous devons utiliser la boxe intermédiaire ou une autre bibliothèque tierce qui implémente ce tri par primitives.

3
i_am_zero

Vous pouvez utiliser la fonction Arrays.sort () .

sort() method is a Java.util.Arrays class method.          
Declaration : Arrays.sort(arrName)
2
rashedcs

Manière la plus efficace!

public static void main(String args[])
{
    int [] array = new int[10];//creates an array named array to hold 10 int's
    for(int x: array)//for-each loop!
      x = ((int)(Math.random()*100+1));
    Array.sort(array);
    for(int x: array)
      System.out.println(x+" ");
}
0
max johnson