1

私がこれを持っていると考えてください:

class Sort {

private Integer[] intArray = {30,20,50,100,1,2,6,1,3,5};

Sort() {

    sortObject(intArray);
}

 public <T extends Comparable<T>> void sortObject(T[] array) {

    T el = array[0];

    for(T elements : array) {
        if(el.compareTo(elements)<0) {
            /// ??????
        }        

    }

compareTo() を使用して整数配列値をソートするにはどうすればよいですか?

4

3 に答える 3

2

手でやろうとしているのArrays.sort(Object[])は何ですか?次に、本当に必要なのはアルゴリズムに関する本です。次に、バブル、挿入、クイック、シェル、ヒープなど、さまざまな実装を確認する必要があります。Java には独自のアルゴリズムがあり、どこかに文書化されています。

ただし、 を使用していることはわかっているため、ジェネリック型を使用しないでくださいInteger。があることを知っているIntegerので、それを使用してください。 Integerを実装Comparableしているため、余分な宣言は必要ありません。

class SortExample {

    private Integer[] intArray = {30,20,50,100,1,2,6,1,3,5};

    SortExample() {
        System.out.println("Before sort " + Arrays.toString(intArray));
        sortObject(intArray);
        System.out.println("After  sort " + Arrays.toString(intArray));
    }

    public void sortObject(Integer[] array) {
        Arrays.sort(intArray);
    }

}

使用するアルゴリズムをテストする場合は、メソッドを置き換えますsortObject。バブルソートの場合、これを使用します。

// Figure out how efficient your algorithm is.
private int numberSwaps = 0;

public void sortObject(Integer[] array) {
    final int last = array.length - 1;
    for (int end = last; end > 0; end--) {
        for (int i = 1; i <= end; i++) {
            // No need for compareTo here; it does exactly the same thing.
            if (array[i] < array[i-1]) {
                swap(array, i, i-1);
                numberSwaps++;
            }
        }
    }
    System.out.println("Needed " + numberSwaps + " swaps.");
}

private void swap(Integer[] array], int from, int to) {
    int temp = array[from];
    array[from] = array[to];
    array[to] = temp;
}
于 2013-11-04T20:48:45.180 に答える
2

これは次のようになります。Arrays.sort(intArray).

逆の並べ替え、つまり降順で並べ替えたい場合は、次のようにします。

Arrays.sort(a, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2-o1;
        }
    });

どこaですか Integer[] a = {1, 3, 2, 7, 9, 11};

于 2013-11-04T20:30:31.970 に答える