0

int 配列を作成してクイックソートを使用しようとしましたが、int 配列を取り込む方法がわかりません。intArray = quickSort(intArray); を呼び出すことはできません。メインメソッドについて。ジェネリック型のクイックソート メソッドを使用するにはどうすればよいですか?

public class BasicTraining 
{
    public static <T extends Comparable<? super T>> T[] quickSort(T[] array) 
    {
        sort(0, array.length - 1, array);
        return array;
    }

    public static <T extends Comparable<? super T>> void sort(int low, int high, T[] array)
    {
        if (low >= high) return;
        int p = partition(low, high, array);
        sort(low, p, array);
        sort(p + 1, high, array);
    }

    private static <T extends Comparable<? super T>> int partition(int low, int high, T[] array)
    {
        T pivot = array[low];

        int i = low - 1;
        int j = high + 1;
        while (i < j)
        {
            i++; 
            while (array[i].compareTo(pivot) < 0) 
                i++;
            j--; 
            while (array[j].compareTo(pivot) > 0) 
                j--;
            if (i < j) 
                swap(i, j, array);
         }
         return j;
      }

    private static <T extends Comparable<? super T>> void swap(int i, int j, T[] array)
    {
        T temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    public static void main(String[] args)
    {
        int[] intArray = new int[] {9,3,6,2,1,10,15,4,7,22,8};
        for(int i = 0; i < intArray.length; i++)
        {
            System.out.print(intArray[i] + ", ");
        }
//      intArray = quickSort(intArray);

    }
}
4

3 に答える 3

3

ジェネリック型は、型に対してパラメーター化されたジェネリック クラスまたはインターフェイスであり、Java はプリミティブ型をサポートしていません。

プリミティブ型 int ではなく整数配列を使用します。

Integer[] intArray = new Integer[] {9,3,6,2,1,10,15,4,7,22,8};
于 2012-10-15T07:56:46.123 に答える
1

Integerプリミティブではない配列が必要です。ジェネリック型のOracleドキュメントから

型変数には、指定した非プリミティブ型(クラス型、インターフェイス型、配列型、または別の型変数)を指定できます。

Integer[] intArray = new Integer[]{9, 3, 6, 2, 1, 10, 15, 4, 7, 22, 8};
于 2012-10-15T07:58:16.013 に答える
1

これintは、がプリミティブ型であり、したがって型ではないためですT extends Comparable<? super T>

したがって、配列を変換するかInteger[]、特定のquicksort(int[] array)メソッドを作成する必要があります。これが実際にJDKで行われていることです。

于 2012-10-15T07:59:44.923 に答える