Эти числа хранятся в одной и той же целочисленной переменной. Как мне отсортировать целые числа от наименьшего к наибольшему?
11367 11358 11421 11530 11491 11218 11789
Эти числа хранятся в одной и той же целочисленной переменной. Как мне отсортировать целые числа от наименьшего к наибольшему?
11367 11358 11421 11530 11491 11218 11789
На самом деле есть два варианта:
E.g.,
int[] ints = {11367, 11358, 11421, 11530, 11491, 11218, 11789};
Arrays.sort(ints);
System.out.println(Arrays.asList(ints));
Это, конечно, предполагает, что у вас уже есть целые числа в виде массива. Если вам нужно сначала проанализировать их, найдите String.split и Integer.parseInt.
Вы можете поместить их в список, а затем отсортировать их, используя их естественный порядок, например:
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
Что ж, если вы хотите сделать это по алгоритму. Существует множество алгоритмов сортировки. Если вас не слишком заботит эффективность, а больше - удобочитаемость и понятность. Я рекомендую сортировку вставкой. Вот код 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;
Для сортировки узкого диапазона целых чисел попробуйте Подсчетную сортировку, сложность которой равна O(range + n)
, где n
- количество сортируемых элементов. Если вы хотите отсортировать что-то не дискретное, используйте оптимальные алгоритмы n * log (n) (quicksort, heapsort, mergesort). Сортировка слиянием также используется в методе, уже упомянутом в других ответах Arrays.sort
. Нет простого способа порекомендовать какой-либо алгоритм или вызов функции, потому что есть десятки особых случаев, когда вы использовали бы какой-то вид, но не другой.
Поэтому, пожалуйста, укажите точную цель вашего приложения (чтобы чему-то научиться (ну - начните с сортировки вставкой или пузырьковой сортировки), эффективность для целых чисел (используйте сортировку с подсчетом), эффективность и возможность повторного использования для структур (используйте алгоритмы n * log (n)) , или zou просто хотите, чтобы это было как-то отсортировано - используйте Arrays.sort :-)). Если вы хотите отсортировать строковые представления целых чисел, то u может быть заинтересован в сортировке по основанию ...
если у 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());
}
}
}
Принимайте входные данные от пользователя и сортировки по вставке. Вот как это работает:
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);
}
}
}
These numbers are stored in the same integer variable
- Я бы ожидал, что Javaint
илиInteger
будет иметь ровно одно значение в любой данный момент времени: если вы хотите упорядочить значения, используйтеCollection
или массив. - person greybeard   schedule 30.12.2015