массив int [] (сортировка по убыванию) - PullRequest
8 голосов
/ 20 марта 2012

Так что я не уверен, почему это становится настолько сложным для меня, но мне нужно сортировать по убыванию и по убыванию.

Для высокого по низкому у меня есть:

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;
        }
    }
}

Однако я не могу всю жизнь заставить его работать в обратном порядке (от низкого до высокого), я продумал логику и она всегда возвращает 0 для всех значений.Любая помощь приветствуется!

В целом, у меня есть JTable с 4 столбцами, каждый столбец с записями чисел, имен или дат.Мне нужно уметь сортировать их туда-сюда.

Спасибо!

Ответы [ 11 ]

18 голосов
/ 20 марта 2012

Если вы не думаете, что использование уже доступных функций сортировки и автобокс обманывает:

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));

Отпечатки low to high:[1, 6, 9, 12, 31, 34, 67, 78]

если вам нужно изменить значение с высокого на низкое значение x-y на y-x в компараторе

3 голосов
/ 10 июля 2013
  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 голосов
/ 20 марта 2012

Вы никогда не посещаете последний элемент массива.

Кроме того, вы должны знать, что пузырьковая сортировка довольно неэффективна, и вы можете просто использовать Arrays.sort().

2 голосов
/ 12 июня 2014

Вам просто нужно написать одну строку Arrays.sort(arr) для от низкого до высокого для Java 8.

Arrays.sort(arr, Collections.reverseOrder()) для от высокой к низкой

1 голос
/ 23 марта 2015

В java8 вы можете сделать что-то вроде этого:

temp.stream()
    .sorted((e1, e2) -> Integer.compare(e2, e1))
    .forEach(e -> System.out.println(e));  
1 голос
/ 20 марта 2012

Единственное, что вам нужно сделать, чтобы изменить порядок сортировки, это изменить

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

на

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

Хотя, как уже отмечали другие, это очень неэффективно!: -)

0 голосов
/ 30 марта 2018

Если вы хотите применить ту же логику, что и вы ... не используя Arrays.sort ..., то следующее поможет

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 голосов
/ 23 марта 2015

Дайте мне знать, если это работает:

public class prog1 {
    public static void main (String args[]){
        int a[] = {1,22,5,16,7,9,12,16,18,30};

        for(int b=0; b<=a.length;b++){
            for(int c=0; c<=a.length-2;c++){
                if(a[c]>a[c+1]){

                    int temp=0;
                    temp=a[c];

                    a[c]=a[c+1];
                    a[c+1]=temp;
                }
            }

        }
        for(int b=0;b<a.length;b++){
            System.out.println(a[b]);
        }
    }
}
0 голосов
/ 27 июля 2014

Вы можете попробовать с пузырьковой сортировкой: Пример показан ниже

int[] numbers = { 4, 7, 20, 2, 56 };
int temp;

for (int i = 0; i < numbers.length; i++)
{
       for(int j = 0; j < numbers.length; j++)
       {
                if(numbers[i] > numbers[j + 1])
                {
                            temp = numbers [j + 1];
                            numbers [j + 1]= numbers [i];
                            numbers [i] = temp;
                }
        }
}

for (int i = 0; i < numbers.length; i++)
{
         System.out.println(numbers[i].toString());
}
0 голосов
/ 30 ноября 2013

Если вы просто хотите отсортировать массив int: используйте быструю сортировку ... Это не много кода, и это N * lgN в среднем или N ^ 2 в худшем случае. Для сортировки нескольких данных используйте Java Compare (как указано выше) или алгоритм стабильной сортировки

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...