我对编码很新,我尝试使用插入排序从字符串数组中按字母顺序排列单个字符串。任何帮助将深表感谢。 输入是" 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);
}
答案 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));
}