据我所知,我在这里实现了基本的插入排序。输出是相同的数组,未排序。我正确使用compareTo吗?我不确定这是一个大于或小于零的数字意味着什么。
import java.util.Arrays;
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int lineNumber = 5;
int i,j;
String key;
String[] inputArray = {"E","D","C","B","A","B"};
System.out.println(Arrays.toString(inputArray));
for (j = 1; j < lineNumber; j++) {
key = inputArray[j];
i = j - 1;
while (i >= 0) {
if (key.compareTo(inputArray[i]) < 0) {
break;
}
inputArray[i + 1] = inputArray[i];
i--;
}
inputArray[i + 1] = key;
System.out.println(Arrays.toString(inputArray));
}
System.out.println(Arrays.toString(inputArray));
}
运行:
[E, D, C, B, A, B]
[E, D, C, B, A, B]
[E, D, C, B, A, B]
[E, D, C, B, A, B]
[E, D, C, B, A, B]
[E, D, C, B, A, B]
BUILD SUCCESSFUL (total time: 0 seconds)
答案 0 :(得分:3)
指出:不,你没有正确使用compareTo()
。以下代码按预期工作。
public static void main(String[] args) {
int i,j;
String key;
String[] inputArray = {"E","D","C","B","A","B"};
System.out.println(Arrays.toString(inputArray));
for (j = 1; j < inputArray.length; j++) { //the condition has changed
key = inputArray[j];
i = j - 1;
while (i >= 0) {
if (key.compareTo(inputArray[i]) > 0) {//here too
break;
}
inputArray[i + 1] = inputArray[i];
i--;
}
inputArray[i + 1] = key;
System.out.println(Arrays.toString(inputArray));
}
System.out.println(Arrays.toString(inputArray));
}
为什么compareTo()
执行的操作在其他答案中得到了很好的解释。除了我改变了for循环应该运行的值,它应该运行到数组的末尾(array.length),而不是直到任何其他数字。
答案 1 :(得分:3)
这种实现几乎是正确的,但有几个问题:
key.compareTo(inputArray[i]) < 0
,您将按降序排序。如果这个条件为真,则意味着key
在inputArray[i]
之前是lexicographally,并且通过在内循环上使用它作为终止条件,你确保插入key
这样在它之前的一切都更大,之后的一切都更少。将其更改为key.compareTo(inputArray[i]) >= 0
以按升序排序。lineNumber = 5
,但阵列中有6个项目。将其更改为6(或更好,使用inputArray.length
。因此,您按相反顺序对前5个数组条目进行排序,并且由于输入数组中的前5个项目恰好已经按相反的顺序排列,因此您没有看到任何更改。这就是为什么用各种输入测试代码是个好主意: - )
答案 2 :(得分:1)
发现于:http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html#compareTo(T)
int compareTo(T o) 将此对象与指定的对象进行比较以获得顺序。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。
答案 3 :(得分:0)
该行:
if(key.compareTo(inputArray[i]) < 0)
不正确,您需要切换'&lt;'签到'&gt;'它会正确排序。
答案 4 :(得分:0)
如果您只是比较字符A,B,C,D,...,那么为什么不比较字符呢?然后你可以theChar <= 'A'
或其他类似的东西。