сортировка целых чисел в порядке от наименьшего к наибольшему java

Эти числа хранятся в одной и той же целочисленной переменной. Как мне отсортировать целые числа от наименьшего к наибольшему?

11367
11358
11421
11530
11491
11218
11789

person user983246    schedule 16.10.2011    source источник
comment
В будущем вам может оказаться более полезным указать любые налагаемые на вас ограничения. Например, можете ли вы использовать предоставленные Java-подходы к сортировке или хотите реализовать свои собственные. Это поможет вам получить более подходящий ответ с меньшими усилиями :)   -  person obfuscation    schedule 17.10.2011
comment
These numbers are stored in the same integer variable - Я бы ожидал, что Java int или Integer будет иметь ровно одно значение в любой данный момент времени: если вы хотите упорядочить значения, используйте Collection или массив.   -  person greybeard    schedule 30.12.2015


Ответы (6)


На самом деле есть два варианта:

  1. Используйте стандартные коллекции, как объяснил Shakedown
  2. Используйте Arrays.sort.

E.g.,

int[] ints = {11367, 11358, 11421, 11530, 11491, 11218, 11789};
Arrays.sort(ints);
System.out.println(Arrays.asList(ints));

Это, конечно, предполагает, что у вас уже есть целые числа в виде массива. Если вам нужно сначала проанализировать их, найдите String.split и Integer.parseInt.

person alf    schedule 16.10.2011
comment
К вашему сведению - ссылки Oracle не работают. Они либо сломаны, либо для просмотра требуется учетная запись Oracle, я не могу сказать, какая именно. - person Kimbluey; 14.12.2016
comment
У них вроде вышла 1.4.2 ... Буду обновлять, спасибо. - person alf; 14.12.2016

Вы можете поместить их в список, а затем отсортировать их, используя их естественный порядок, например:

final List<Integer> list = Arrays.asList(11367, 11358, 11421, 11530, 11491, 11218, 11789);
Collections.sort( list );
// Use the sorted list

Если числа хранятся в одной переменной, вам придется как-то поместить их в List, а затем вызвать sort, например:

final List<Integer> list = new ArrayList<Integer>();
list.add( myVariable );
// Change myVariable to another number...
list.add( myVariable );
// etc...

Collections.sort( list );
// Use the sorted list
person Nate W.    schedule 16.10.2011
comment
Есть ли другой способ сортировки чисел. У меня есть люди, которые рекомендуют мне ArrayList, но мы должны сортировать с помощью цикла for и оператора if, потому что меня еще никогда не учили ArrayList - person user983246; 17.10.2011

Что ж, если вы хотите сделать это по алгоритму. Существует множество алгоритмов сортировки. Если вас не слишком заботит эффективность, а больше - удобочитаемость и понятность. Я рекомендую сортировку вставкой. Вот код psudo, его тривиально перевести в java.

begin
    for i := 1 to length(A)-1 do
    begin
        value := A[i];
        j := i - 1;
        done := false;
        repeat
            { To sort in descending order simply reverse
              the operator i.e. A[j] < value }
            if A[j] > value then
            begin
                A[j + 1] := A[j];
                j := j - 1;
                if j < 0 then
                    done := true;
            end
            else
                done := true;
        until done;
        A[j + 1] := value;
    end;
end;
person Suraj Kulkarni    schedule 16.10.2011
comment
структура кода не совпадает. Просто перейдите сюда, en.wikipedia.org/wiki/Insertion_sort - person Suraj Kulkarni; 17.10.2011

Для сортировки узкого диапазона целых чисел попробуйте Подсчетную сортировку, сложность которой равна O(range + n), где n - количество сортируемых элементов. Если вы хотите отсортировать что-то не дискретное, используйте оптимальные алгоритмы n * log (n) (quicksort, heapsort, mergesort). Сортировка слиянием также используется в методе, уже упомянутом в других ответах Arrays.sort. Нет простого способа порекомендовать какой-либо алгоритм или вызов функции, потому что есть десятки особых случаев, когда вы использовали бы какой-то вид, но не другой.

Поэтому, пожалуйста, укажите точную цель вашего приложения (чтобы чему-то научиться (ну - начните с сортировки вставкой или пузырьковой сортировки), эффективность для целых чисел (используйте сортировку с подсчетом), эффективность и возможность повторного использования для структур (используйте алгоритмы n * log (n)) , или zou просто хотите, чтобы это было как-то отсортировано - используйте Arrays.sort :-)). Если вы хотите отсортировать строковые представления целых чисел, то u может быть заинтересован в сортировке по основанию ...

person malejpavouk    schedule 17.10.2011

если у array.sort нет того, что вы ищете, вы можете попробовать это:

package drawFramePackage;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Random;
public class QuicksortAlgorithm {
    ArrayList<AffineTransform> affs;
    ListIterator<AffineTransform> li;
    Integer count, count2;
    /**
     * @param args
     */
    public static void main(String[] args) {
        new QuicksortAlgorithm();
    }
    public QuicksortAlgorithm(){
        count = new Integer(0);
        count2 = new Integer(1);
        affs = new ArrayList<AffineTransform>();
        for (int i = 0; i <= 128; i++){
            affs.add(new AffineTransform(1, 0, 0, 1, new Random().nextInt(1024), 0));
        }
        affs = arrangeNumbers(affs);
        printNumbers();
    }
    public ArrayList<AffineTransform> arrangeNumbers(ArrayList<AffineTransform> list){
        while (list.size() > 1 && count != list.size() - 1){
            if (list.get(count2).getTranslateX() > list.get(count).getTranslateX()){
                list.add(count, list.get(count2));
                list.remove(count2 + 1);
            }
            if (count2 == list.size() - 1){
                count++;
                count2 = count + 1;
            }
            else{
            count2++;
            }
        }
        return list;
    }
    public void printNumbers(){
        li = affs.listIterator();
        while (li.hasNext()){
            System.out.println(li.next());
        }
    }
}
person Nathan Nelson    schedule 18.12.2012

Принимайте входные данные от пользователя и сортировки по вставке. Вот как это работает:

package com.learning.constructor;

import java.util.Scanner;



public class InsertionSortArray {

public static void main(String[] args) {    

Scanner s=new Scanner(System.in);

System.out.println("enter number of elements");

int n=s.nextInt();


int arr[]=new int[n];

System.out.println("enter elements");

for(int i=0;i<n;i++){//for reading array
    arr[i]=s.nextInt();

}

System.out.print("Your Array Is: ");
//for(int i: arr){ //for printing array
for (int i = 0; i < arr.length; i++){
    System.out.print(arr[i] + ",");

}
System.out.println("\n");        

    int[] input = arr;
    insertionSort(input);
}

private static void printNumbers(int[] input) {

    for (int i = 0; i < input.length; i++) {
        System.out.print(input[i] + ", ");
    }
    System.out.println("\n");
}

public static void insertionSort(int array[]) {
    int n = array.length;
    for (int j = 1; j < n; j++) {
        int key = array[j];
        int i = j-1;
        while ( (i > -1) && ( array [i] > key ) ) {
            array [i+1] = array [i];
            i--;
        }
        array[i+1] = key;
        printNumbers(array);
    }
}

}
person Deepak Manktala    schedule 30.12.2015