插入排序字符串

时间:2015-02-13 05:52:22

标签: java arrays string char insertion-sort

我对编码很新,我尝试使用插入排序从字符串数组中按字母顺序排列单个字符串。任何帮助将深表感谢。 输入是" alpha"或者[5];我期待" aahlp"。我的代码目前打印出" alpha"。

public static void main(String[] args) 
{
    String[]s = new String[] {"bob", "charlie", "mike", 
                             "lola", "arnold","alpha"};

    sort(s[5]);
}

public static void sort(String s)
{
    String temp = null;
    for(int i = 1; i<s.length(); i++)
    {
        char next= s.charAt(i);

        int j=i;
        while (j > 0 && s.charAt(j-1)>next) 
        { 
            temp = s.substring(0, i) + s.charAt(j-1) + s.substring(i+1);
            System.out.println(temp);
            j--;
        }

        //this is where the problem seems to be happening:
        temp= s.substring(0,i)+next+s.substring(i+1);
        s=temp;
    }
    System.out.println(s);
}

3 个答案:

答案 0 :(得分:1)

由于String是不可变的,因此无法对其进行排序。但是,您可以获取基础char数组并对其进行排序,然后从中创建新的String

如果您的练习是自己实施这样的排序算法,那么您可以这样做:

public class StringSort {
    public static String insertionSort(String s) {
        return new String(insertionSort(s.toCharArray()));
    }

    private static String insertionSort(char[] array) {
        int len = array.length;

        for (int i = len - 1; i > 0; i--) {
            if (array[i] < array[i - 1]) {
                swap(array, i, i - 1);
            }
        }

        for (int i = 2; i < len; i++) {
            char temp = array[i];
            int j = i;
            while (temp < array[j - 1]) {
                array[j] = array[j - 1];
                j--;
            }
            array[j] = temp;
        }

        return new String(array);
    }

    private static  void swap(char[] array, int i, int j) {
        char temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    public static void main(String[] args) {
        String s = "alpha";
        String sSorted = insertionSort(s);
        System.out.println(sSorted);
    }
}

但是,如果您不需要自己实现排序,那么只需使用内置排序就可以减少出错的可能性:

private static void sort(String s) {
    char[] array = s.toCharArray();
    Arrays.sort(array);
    System.out.println(new String(array));
} 

答案 1 :(得分:0)

感谢您的帮助。我让它正常工作,我甚至能够对整个String数组进行排序。如果您想知道,这是代码。 (已多次编辑)

public static void main(String[] args) 
    {
        String[]sa = new String[] {"bob", "charlie", "mike", 
                                 "lola", "arnold","alpha", "beta"};
        sort(sa);

        for (int i= 0; i< sa.length; i++)
        System.out.println(sa[i]);

    }

    public static String[] sort(String[] sa)
    {
        //indexing through sa[k] (the string array
        for(int k=0;k<sa.length;k++)
        {

            String s= sa[k];

        char[] adam=s.toCharArray();

        //The actual insertion sort, indexing through s, represented as char[] adam for simplicity
        for(int i = 1; i<adam.length; i++)
        {
            char next= adam[i];

            int j=i;
            //
            while (j > 0 && adam[j-1]>next) 
            { 
                adam[j]=adam[j-1];

                j--;
            }


           adam[j]=next;
           s=sa[k]=String.valueOf(adam);



        }


       //System.out.println(s);

        }

        return sa;
    }

答案 2 :(得分:0)

请改用以下排序方法:

private static void sort(String s) {
    char[] charArray = s.toCharArray();
    Arrays.sort(charArray);
    System.out.println(new String(charArray));
}