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!
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
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()
.
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
}
}
}
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! :-)
En Java8, vous pouvez faire quelque chose comme ceci:
temp.stream()
.sorted((e1, e2) -> Integer.compare(e2, e1))
.forEach(e -> System.out.println(e));
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
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;
}
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+",");
}
Vous avez besoin d'un tri plus efficace. comme mergesort. essayez www.geekviewpoint.com et allez trier