Java 使用插入排序对字符串开头的元音进行排序
是否可以使用插入排序算法对字符串开头的元音进行排序 我尝试了很多,但我不明白,有人提示如何实现它,或者我应该使用其他排序算法吗Java 使用插入排序对字符串开头的元音进行排序,java,insertion-sort,Java,Insertion Sort,是否可以使用插入排序算法对字符串开头的元音进行排序 我尝试了很多,但我不明白,有人提示如何实现它,或者我应该使用其他排序算法吗 static char[]text=“thisisasString.tocharray(); 静态void insertionsort(){ for(int i=0;i=0)和&Character.toLowerCase(text[j])>Character.toLowerCase(h)){ 文本[j+1]=文本[j]; j=j-1; } 文本[j+1]=h; } }
static char[]text=“thisisasString.tocharray();
静态void insertionsort(){
for(int i=0;i=0)和&Character.toLowerCase(text[j])>Character.toLowerCase(h)){
文本[j+1]=文本[j];
j=j-1;
}
文本[j+1]=h;
}
}
例如:“ThisisString”->“aiiighnrsstt”您可以使用插入排序(就像其他排序算法一样,它们都是相等的。只是对字段排序所花费的时间不同,但结果总是相同的) 算法中的问题是没有检查比较的字符是元音还是大写/小写 此代码应适用于:
public class StringSorter {
private static final String vowels = "aeiou";
public static void main(String[] args) {
char[] string = "thisIsAString".toCharArray();
char[] test2 = "thisIsAStringaAabBs".toCharArray();
System.out.println("unsorted: " + new String(string));
insertionSort(string);
System.out.println("sorted: " + new String(string));
System.out.println();
System.out.println("unsorted: " + new String(test2));
insertionSort(test2);
System.out.println("sorted: " + new String(test2));
}
public static void insertionSort(char[] string) {
for (int i = 1; i < string.length; i++) {
char h = string[i];
int j = i;
while ((j > 0) && isBefore(string[j - 1], h)) {
string[j] = string[j - 1];
j = j - 1;
}
string[j] = h;
}
}
private static boolean isBefore(char a, char b) {
String lowA = Character.toString(Character.toLowerCase(a));
String lowB = Character.toString(Character.toLowerCase(b));
if (vowels.contains(lowA)) {
if (vowels.contains(lowB)) {
//both are vowels
return chooseLowerCaseFirst(a, b);
}
else {
//only a is a vowel
return false;
}
}
else if (vowels.contains(lowB)) {
//only b is a vowel
return true;
}
else {
//none is a vowel
return chooseLowerCaseFirst(a, b);
}
}
private static boolean chooseLowerCaseFirst(char a, char b) {
String lowA = Character.toString(Character.toLowerCase(a));
String lowB = Character.toString(Character.toLowerCase(b));
if (lowA.equals(lowB)) {
//both are the same character
if (Character.isLowerCase(a)) {
if (Character.isLowerCase(b)) {
//both are lower case
return Character.toLowerCase(a) > Character.toLowerCase(b);
}
else {
//only a is lower case
return false;
}
}
else if (Character.isLowerCase(b)) {
//only b is lower case
return true;
}
else {
//both are upper case
return Character.toLowerCase(a) > Character.toLowerCase(b);
}
}
else {
//different characters
return Character.toLowerCase(a) > Character.toLowerCase(b);
}
}
}
如果您也在考虑其他方法,那么在Java8中,您可以通过混合和
import java.util.*;
导入java.util.stream.collector;
公共班机{
私有静态列表顺序=新的数组列表(数组.asList('a','a','e','e','i','i','o','u','u','b','b','c','c','d','f','g','g','h','h','j','j','k','l','m','n','p','p','q','r','s','s','t','t','v','w','x','x','y','y','z');
公共静态void main(字符串[]args){
字符串示例=“thisIsAString”;
List cl=example.chars().mapToObj(c->(char)c.collect(Collectors.toList());
List ls=cl.stream().sorted(Comparator.comparingInt(order::indexOf)).collect(collector.toCollection(ArrayList::new));
StringBuilder结果=新建StringBuilder();
对于(字符c:ls)结果。追加(c);
系统输出打印项次(结果);
}
}
您可以提供输入和所需输出的示例吗?您现在可以阅读示例,如果它是aiiighnrsstt
?在大写之前没有小写字母您可能还需要添加定义/声明字符串
变量的位置(我假设它是某个字段)。注意:我不会给它这个名字,因为String
也是Java中的一种类型。
unsorted: thisIsAString
sorted: AiiIghnrssStt
unsorted: thisIsAStringaAabBs
sorted: aaAAiiIbBghnrsssStt
import java.util.*;
import java.util.stream.Collectors;
public class Main {
private static List<Character> order = new ArrayList<>(Arrays.asList('a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U', 'b', 'B', 'c', 'C', 'd', 'D', 'f', 'F', 'g', 'G', 'h', 'H', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z'));
public static void main(String[] args) {
String example = "thisIsAString";
List<Character> cl = example.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
List<Character> ls = cl.stream().sorted(Comparator.comparingInt(order::indexOf)).collect(Collectors.toCollection(ArrayList::new));
StringBuilder result = new StringBuilder();
for (Character c : ls) result.append(c);
System.out.println(result);
}
}