web-dev-qa-db-fra.com

int [] array (tri du plus bas au plus élevé)

Donc, je ne suis pas sûr de savoir pourquoi cela devient si difficile pour moi, mais je dois trier de haut en bas et de bas en haut.

De haut en bas j'ai:

int a, b;
int temp;
int sortTheNumbers = len - 1;

for (a = 0; a < sortTheNumbers; ++a) {
    for (b = 0; b < sortTheNumbers; ++b) {
        if (array[b] < array[b + 1]) {
            temp = array[b];
            array[b] = array[b + 1];
            array[b + 1] = temp;
        }
    }
}

Cependant, je ne peux pas le faire fonctionner à l'envers, j'ai réfléchi à la logique et il renvoie toujours des 0 pour toutes les valeurs . Toute aide appréciée!

La vue d'ensemble est que j'ai un JTable avec 4 colonnes, chaque colonne avec des entrées de nombres, noms ou dates. Je dois être capable de trier ces va-et-vient.

Merci!

8
Austin

Sauf si vous pensez que l'utilisation de fonctions de tri et de la sélection automatique déjà disponibles est une tricherie:

Integer[] arr =
    { 12, 67, 1, 34, 9, 78, 6, 31 };
    Arrays.sort(arr, new Comparator<Integer>()
    {
        @Override
        public int compare(Integer x, Integer y)
        {
            return x - y;
        }
    });

    System.out.println("low to high:" + Arrays.toString(arr));

Imprime low to high:[1, 6, 9, 12, 31, 34, 67, 78]

si vous avez besoin de haut en bas, changez x-y en y-x dans le comparateur

18
Kennet

Vous ne visitez jamais le dernier élément du tableau.

En outre, vous devez savoir que le type à bulle est plutôt inefficace et que vous pouvez simplement utiliser Arrays.sort().

3
matt b
  public class sorting {
  public static void main(String arg[])throws Exception{
  int j[]={1,28,3,4,2};   //declaring array with disordered values  

  for(int s=0;s<=j.length-1;s++){
  for(int k=0;k<=j.length-2;k++){
         if(j[k]>j[k+1]){   //comparing array values

    int temp=0;    
    temp=j[k];     //storing value of array in temp variable 

j[k]=j[k+1];    //swaping values
j[k+1]=temp;    //now storing temp value in array


}    //end if block             
}  // end inner loop    
}
//end outer loop

for(int s=0;s<=j.length-1;s++){
System.out.println(j[s]);       //retrieving values of array in ascending order 

}   

}
}
3
Zulfiqar Ali

La seule chose que vous devez faire pour changer l'ordre de tri est le changement

if (array[b] < array[b + 1])

à

if (array[b] > array[b + 1])

Bien que, comme d'autres l'ont noté, c'est très inefficace! :-)

1
dty

En Java8, vous pouvez faire quelque chose comme ceci:

temp.stream()
    .sorted((e1, e2) -> Integer.compare(e2, e1))
    .forEach(e -> System.out.println(e));  
1
albertjan

Il vous suffit d’écrire one string Arrays.sort(arr) pour de bas en haut pour Java 8. 

Arrays.sort(arr, Collections.reverseOrder()) pour décroissant

1
SergaRUS

Si vous voulez juste trier le tableau int: Utilisez le quicksort ... Ce n'est pas beaucoup de code et c'est N * lgN en moyenne ou N ^ 2 dans le pire des cas . Pour trier plusieurs données, utilisez Java Compare ( comme ci-dessus) ou un algorithme de tri stable

static void quicksort(int[] a,int l, int r){
    if(r <= l) return;
    int pivot = partition(a,l,r);

    //Improvement, sort the smallest part first
    if((pivot-l) < (r-pivot)){
        quicksort(a,l,pivot-1);
        quicksort(a,pivot+1,r);
    }else{
        quicksort(a,pivot+1,r);
        quicksort(a,l,pivot-1);
    }
}

static int partition(int[] a,int l,int r){
    int i = l-1;
    int j = r;
    int v = a[r];
    while(true){
        while(less(a[++i],v));  //-> until bigger
        while((less(v,a[--j]) && (j != i)));    //-> until smaller and not end
        if(i >= j){
            break;
        }
        exch(a,i,j);
    }
    exch(a,i,r);
    return i;
}
0
dario nascimento

Si vous souhaitez appliquer la même logique que ce que vous avez fait ... en n'utilisant pas Arrays.sort ..., la suite vous aidera

int[] intArr = {5, 4, 3, 8, 9, 11, 3, 2, 9, 8, 7, 1, 22, 15, 67, 4, 17, 54};
    //Low to high
    for(int j=0; j<intArr.length-1; j++){
        for(int i=0; i<intArr.length-1; i++){
            if (intArr[i] > intArr[i+1]){
                int temp = intArr[i+1];
                intArr[i+1] = intArr[i];
                intArr[i] = temp;
            }
        }
    }
    //High to low
    for(int j=0; j<intArr.length-1; j++){
        for(int i=0; i<intArr.length-1; i++){
            if (intArr[i] < intArr[i+1]){
                int temp = intArr[i+1];
                intArr[i+1] = intArr[i];
                intArr[i] = temp;
            }
        }
    }
    for(int ars : intArr){
        System.out.print(ars+",");
    }
0
NoviceUser

Vous avez besoin d'un tri plus efficace. comme mergesort. essayez www.geekviewpoint.com et allez trier

0
kasavbere