在Java中按反向字母顺序对字符串数组进行排序

时间:2012-12-08 16:58:53

标签: java

我的任务是将此代码转换为反向排序,但对于我的生活却无法弄清楚如何去做。这些是我的sort,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;
    }
}

8 个答案:

答案 0 :(得分:6)

不要重新发明轮子 -

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]

答案 1 :(得分:4)

A. R. S.的回答:

如果允许您使用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
            }
        });

答案 2 :(得分:3)

您可以将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;
}

答案 3 :(得分:1)

您可以使用Arrays.sort(arr)按字母顺序排序。

然后反转它。

答案 4 :(得分: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());

答案 5 :(得分: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

答案 6 :(得分:1)

因此,首先我们需要创建String数组,然后使用Arrays.sort(String[]);,然后使用for反向排序数组以反转顺序。

import java.util.Arrays;

public class SortClass {
    public static void main(String[] args) {
        String[] arrayString = new String[5];
        arrayString[0] = "Cat";
        arrayString[1] = "Apple";
        arrayString[2] = "Dog";
        arrayString[3] = "Mouse";
        arrayString[4] = "kitchen";
        Arrays.sort(arrayString);
        String[] arrReverse = new String[arrayString.length];
        for (int i = arrayString.length - 1; i >= 0; i--) {
            arrReverse[arrayString.length - 1 - i] = arrayString[i];

        }
    }
}

答案 7 :(得分:0)

String arr[]= new String[];
String s;     //input string
int count=0;
for(int i=0;i<=s.length()-k;i++){
                arr[i]=s.substring(i,i+k);  //using substring method
                count++;
            }


           int i=0;
           int b=count;
         while(count>0){
              int j=0; 
            while(j<b){
                 if((arr[i].compareTo(arr[j])>0)){  
                    String temp= arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                  }
            j++;
            } 
            i++; 
            count--;
        }

 for(i=0;i<b;i++)
     System.out.println(arr[i]);