6

私はこのコードを逆のソートに変換するという任務を負っていますが、私の人生の間、それを行う方法を理解することはできません。これらは私のソート、findlargest、swapメソッドです。私はここで明白な何かを見逃していると感じています、どんな助けでも本当にありがたいです。

    public static void sort(String[] arr)
    {
        for (int pass = 1; pass < arr.length; pass++)
        {
            int largestPos = findLargest(arr, arr.length - pass);
            if (largestPos != arr.length - pass)
            {
                swap(arr, largestPos, arr.length - pass);
            }
        }
    }

    public static int findLargest(String[] arr, int num)
    {
        int largestPos = 0;
        for (int i = 1; i <= num; i++)
        {
            if (arr[i].compareToIgnoreCase(arr[largestPos]) > 0)
            {
                largestPos = i;
            }
        }
        return largestPos;
    }

    public static void swap(String[] arr, int first, int second)
    {
        String temp = arr[first];
        arr[first] = arr[second];
        arr[second] = temp;
    }
}
4

8 に答える 8

7

車輪を再発明しないでください -

String[] strs = {"a", "b", "d", "c", "e"};

Arrays.sort(strs, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));

System.out.println(Arrays.toString(strs));
[e、d、c、b、a]
于 2012-12-08T17:44:04.567 に答える
4

ARSの回答からのフォローアップ:

Arrays.Sort メソッドの使用が許可されている場合は、カスタム コンパレータを使用できます...

Arrays.sort(stringArray, new Comparator<String>() {
            @Override
            public int compare(String t, String t1) {
                return -t.compareToIgnoreCase(t1); //reverse the comparison, while ignoring case
            }
        });
于 2012-12-08T18:13:22.233 に答える
2

次のように、findLargest を findSmallest に変更できますか。

public static void sort(String[] arr) {
    for (int pass = 1; pass < arr.length; pass++) {
        int largestPos = findSmallest(arr, arr.length - pass);
        if (largestPos != arr.length - pass) {
            swap(arr, largestPos, arr.length - pass);
        }
    }
}

public static int findSmallest(String[] arr, int num) {
    int largestPos = 0;
    for (int i = 1; i <= num; i++) {
        if (arr[i].compareToIgnoreCase(arr[largestPos]) < 0) {
            largestPos = i;
        }
    }
    return largestPos;
}

public static void swap(String[] arr, int first, int second) {
    String temp = arr[first];
    arr[first] = arr[second];
    arr[second] = temp;
}
于 2012-12-08T17:03:28.530 に答える
1

を使用Arrays.sort(arr)して、アルファベット順に並べ替えることができます。

そしてそれを逆にします。

于 2012-12-08T17:02:44.750 に答える
1

これはあなたが必要とするものだと思います(コレクションフレームワークについて考えていない場合)。

public static void main(String args[]) {


    String [] arr ={"abc","bac","cbc"};
            String temp="";

    for(int i=0;i<arr.length;i++){

        for(int j=i+1;j<arr.length;j++){

            if(arr[j].compareTo(arr[i]) > 0){

                temp = arr[i] ;
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

    }

    for(String val:arr){
        System.out.println(val);
    }

}

出力は

cbc
bac
abc
于 2012-12-08T17:35:30.590 に答える
1
public static void sort(String[] arr) {
     Arrays.sort(arr);
     for (int i=0; i<arr.length/2; i++) {
        swap(arr,i,arr.length-1-i);
     }
}

必要に応じて、これを試してください。あなたのバージョンでは、配列の最後に向かって最大のものを移動しているため、アルファベット順になります。

元のアプローチを主張する場合に備えて、コードにいくつかの小さな変更を加えました。

public static void sort(String[] arr)
{
    for (int pass = 1; pass < arr.length; pass++)
    {
        int largestPos = findLargest(arr, pass-1);
        if (largestPos != pass - 1)
        {
            swap(arr, largestPos, pass - 1);
        }
    }
}

public static int findLargest(String[] arr, int num)
{
    int largestPos = num;
    for (int i = num+1; i < arr.length; i++)
    {
         if (arr[i].compareToIgnoreCase(arr[largestPos]) > 0)
         {
            largestPos = i;
         }
    }
    return largestPos;
}

ただし、 Ian Robertsが示唆しているように、最も些細なことは単にArrays.sort(arr, Collections.reverseOrder());.

于 2012-12-08T17:22:35.897 に答える