web-dev-qa-db-ja.com

Javaで配列をソートする

私は10個の整数の配列からなるプログラムを作成しようとしています。これらはすべてランダムな値を持っています。

しかし、今、私はそれらを最小値から最大値の順に並べ替えてから画面に印刷する必要がありますが、どうすればよいでしょうか。

(プログラムのコードが小さすぎてごめんなさい。ループには向いていません。Javaを使い始めたばかりです)

public static void main(String args[])
{
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" " 
    + array[8]+" " + array[9] );        

}
156
Lukas

ループは以下について学ぶのにも非常に役立ちます。

int[] array = new int[10];
Random Rand = new Random();
for (int i = 0; i < array.length; i++)
    array[i] = Rand.nextInt(100) + 1;
Arrays.sort(array);
System.out.println(Arrays.toString(array));
// in reverse order
for (int i = array.length - 1; i >= 0; i--)
    System.out.print(array[i] + " ");
System.out.println();
192
Peter Lawrey

Printlnの前に行を追加すると、配列はソートされます

Arrays.sort( array );
183
rauschen

自分で実装することで、ループを理解するのに役立ちます。バブルソートを理解するのは簡単です:

public void bubbleSort(int[] array) {
    boolean swapped = true;
    int j = 0;
    int tmp;
    while (swapped) {
        swapped = false;
        j++;
        for (int i = 0; i < array.length - j; i++) {
            if (array[i] > array[i + 1]) {
                tmp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = tmp;
                swapped = true;
            }
        }
    }
}

Arrays.sort(array)によって実装されている QuickSort または MergeSort のような大きなリストのためのより高性能なアルゴリズムがあるので、もちろん、あなたは本番環境でそれを使うべきではありません。

38
isah

Arrays.sort() をご覧ください。

23
uzilan

私は怠け者でループを追加しました

import Java.util.Arrays;


public class Sort {
    public static void main(String args[])
    {
        int [] array = new int[10];
        for ( int i = 0 ; i < array.length ; i++ ) {
            array[i] = ((int)(Math.random()*100+1));
        }
        Arrays.sort( array );
        for ( int i = 0 ; i < array.length ; i++ ) {
            System.out.println(array[i]);
        }
    }
}

配列の長さは10です。0から9までの値をとる1つの変数(i)が必要です。

for ( int i = 0  ; i < array.length ;   i++ ) 
       ^               ^                   ^
       |               |                   ------  increment ( i = i + 1 )
       |               |
       |               +-------------------------- repeat as long i < 10
       +------------------------------------------ start value of i


Arrays.sort( array );

配列をソートするライブラリメソッドです。

19
stacker
Arrays.sort(yourArray)

仕事を完璧にやる

16

下記を参照してください、それはあなたを与える 昇順と降順の両方をソート

import Java.util.Arrays;
import Java.util.Collections;

public class SortTestArray {

/**
 * Example method for sorting an Integer array
 * in reverse & normal order.
 */
public void sortIntArrayReverseOrder() {

    Integer[] arrayToSort = new Integer[] {
        new Integer(48),
        new Integer(5),
        new Integer(89),
        new Integer(80),
        new Integer(81),
        new Integer(23),
        new Integer(45),
        new Integer(16),
        new Integer(2)
    };

    System.out.print("General Order is    : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort);

    System.out.print("\n\nAscending Order is  : ");

    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }


    Arrays.sort(arrayToSort, Collections.reverseOrder());
    System.out.print("\n\nDescinding Order is : ");
    for (Integer i : arrayToSort) {
        System.out.print(i.intValue() + " ");
    }

}


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    SortTestArray SortTestArray = new SortTestArray();
    SortTestArray.sortIntArrayReverseOrder();
}}

出力は

General Order is    : 48 5 89 80 81 23 45 16 2 

Ascending Order is  : 2 5 16 23 45 48 80 81 89 

Descinding Order is : 89 81 80 48 45 23 16 5 2 

注: 手動番号を追加する代わりにMath.ranodmを使用できます。コードを変更する必要があるかどうかを教えてください。

頑張って...乾杯!

7
Fahim Parkar

ちなみにparallelSortを使ってあらゆるタイプの配列をソートするのにJava 8の新しいAPIを使うことができます

parallelSortは、Java 7で導入されたFork/Joinフレームワークを使用して、スレッドプールで使用可能な複数のスレッドにソートタスクを割り当てます。

int配列をソートするために使用できる2つの方法

parallelSort(int[] a)
parallelSort(int[] a,int fromIndex,int toIndex)
6
Sufiyan Ghori

これはあなたのプログラムでこれを使う方法です:

public static void main(String args[])
{
    int [] array = new int[10];

    array[0] = ((int)(Math.random()*100+1));
    array[1] = ((int)(Math.random()*100+1));
    array[2] = ((int)(Math.random()*100+1));
    array[3] = ((int)(Math.random()*100+1));
    array[4] = ((int)(Math.random()*100+1));
    array[5] = ((int)(Math.random()*100+1));
    array[6] = ((int)(Math.random()*100+1));
    array[7] = ((int)(Math.random()*100+1));
    array[8] = ((int)(Math.random()*100+1));
    array[9] = ((int)(Math.random()*100+1));

    Arrays.sort(array); 

    System.out.println(array[0] +" " + array[1] +" " + array[2] +" " + array[3]
    +" " + array[4] +" " + array[5]+" " + array[6]+" " + array[7]+" " 
    + array[8]+" " + array[9] );        

}
6
CloudyMarble
int[] array = {2, 3, 4, 5, 3, 4, 2, 34, 2, 56, 98, 32, 54};

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array.length; j++) {
        if (array[i] < array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}
6
Garrett O'Grady

Int配列はArrays.sort( array )でソートできます。

5
x4u

自然な順序で:Arrays.sort(array)

逆順の場合:Arrays.sort(array, Collections.reverseOrder()); - >これはCollectionsクラスの静的メソッドで、逆方向のComparatorを返すためにさらに自身の内部クラスを呼び出します。

5
AalekhG

Arrays.sort() functionを使用することができます。

sort() method is a Java.util.Arrays class method.          
Declaration : Arrays.sort(arrName)
2
rashedcs

Java 8 int[] arrayを以下のようにソートするために使用できるストリームを使用するオプションを提供します。

int[] sorted = Arrays.stream(array).sorted().toArray(); // option 1
Arrays.parallelSort(array); //option 2

doc に記載されているようにparallelSort

ソートアルゴリズムは、配列をそれ自体がソートされてマージされるサブ配列に分割する並列ソートマージです。サブアレイの長さが最小粒度に達すると、サブアレイは適切なArrays.sortメソッドを使用してソートされます。指定された配列の長さが最小粒度より小さい場合は、適切なArrays.sortメソッドを使用してソートされます。アルゴリズムは、元の配列のサイズ以下の作業スペースを必要とします。 ForkJoin共通プールは、並列タスクを実行するために使用されます。

そのため、入力配列が粒度(Java 9では8192要素、Java 8では4096要素)よりも小さい場合、parallelSortは単純に順次ソートアルゴリズムを呼び出します。

念のために整数配列を逆ソートしたい場合は、次のようにコンパレータを使用できます。

int[] reverseSorted = IntStream.of(array).boxed()
                        .sorted(Comparator.reverseOrder()).mapToInt(i -> i).toArray();

Javaにはカスタムコンパレータを使ってプリミティブをソートする方法がないため、このようなプリミティブソートを実装する中間ボックスまたは他のサードパーティライブラリを使用する必要があります。

2
i_am_zero

最も効果的な方法!

public static void main(String args[])
{
    int [] array = new int[10];//creates an array named array to hold 10 int's
    for(int x: array)//for-each loop!
      x = ((int)(Math.random()*100+1));
    Array.sort(array);
    for(int x: array)
      System.out.println(x+" ");
}
0
max johnson