【发布时间】:2018-08-17 06:38:51
【问题描述】:
我有一个关于在 Java 中使用 插入排序算法 对 String[] 数组进行排序的问题。我确实意识到使用不同的算法可能会更容易完成我的问题,但我正在尝试首先了解一切如何与这个算法一起工作。
基本上,我正在尝试使用该算法对字符串数组进行排序。为此,我比较字符串数组中的 char 值,以便能够使用标准 > 和 == 运算符,因为比较值方式(就像使用 ints 一样)自然非常简单。
我有一个正在解决的解决方案,我通过在每个数组索引处找到的前 2 个 char 值对字符串数组进行排序,但我开始意识到我所做的并不是一个非常强大的解决方案,因为字符串在一个数组很容易具有比彼此“更长”的值,这不会使我的排序对于具有相似值的较长字符串非常准确。
考虑到这一点,有人可以建议(以及我在下面编写的代码)我将如何动态比较从各种 strings 创建的 char 值进行排序原来的 string 值?
那么...
答: ...在比较不同大小字符串的值时,我不会遇到 NullPointer 异常
B: ...每个char值都是从字符串中比较的,不考虑大小,所以我可以准确地对原始字符串数组进行排序)
public String[] sortArrayOfStrings(String[] array){
//NOT COMPLETE, ONLY SORTS BASED ON FIRST & SECOND CHAR OF STRING INDEX
//BASED ON INSERTION SORT ALGORITHM
int length = array.length;
String value;
int index;
for(int a = 1; a < length; a++){
char currentCharValue = array[a].charAt(0);//USE '[a]' not '[index]'
value = array[a];
index = a;
if(currentCharValue == array[a - 1].charAt(0) ){//IF FIRST CHAR == PREVIOUS
while (index > 0 && array[index - 1].charAt(1) > array[index].charAt(1)){
array[index] = array[index - 1];
index = index - 1;
}
}else{
while (index > 0 && array[index - 1].charAt(0) > currentCharValue){
array[index] = array[index - 1];
index = index - 1;
}
}
array[index] = value;
}
return array;
}
由于 2 个字符检查而按预期工作的示例数组:
String[] arr = {"zz", "bb", "cb", "ba","za", "zb", "cz", "ab","aa"};
由于额外字符而无法正确排序的示例数组:
String[] arr = {"bbz", "bba", "abz","abc"};
我知道上面的数组由于硬编码 2 个字符的“检查”而无法正确排序,我正在尝试消除对检查进行硬编码的需要。
【问题讨论】:
标签: java arrays algorithm sorting insertion-sort