选择排序字符串

时间:2015-03-02 23:20:21

标签: java string sorting selection-sort

我读了一个包含城市及其人口的文件,我正在尝试使用选择排序按字母顺序对城市进行排序。 问题在于,由于某种原因,它以奇怪的方式对其进行排序。 "排序"的顺序列表是" ABDCEFHG ..."我试过跟着它,但我无法理解它在哪里搞砸了。这是代码:

    //Selection
    for (int i = 0; i < cities.size() - 1; i++) 
    {
        int minPos = i;
        for (int j = i + 1; j < cities.size(); j++) 
        {
            if (cities.get(j).compareToIgnoreCase(cities.get(minPos)) < -1)
                minPos = j;
        }
        swap(cities, minPos, i);
    }
    System.out.print("\nSelection: ");
    for(int i = 0; i < cities.size(); i++)
        System.out.print(cities.get(i) +"|");

private static void swap(ArrayList <String> a, int i, int j) 
{
    String temp = a.get(i);
    a.set(i, a.get(j));
    a.set(j, temp);
}

知道什么是错的吗?

由于

1 个答案:

答案 0 :(得分:0)

正如其他人所提到的,你的问题几乎肯定是你的... < -1比较,这在比较器的背景下基本上没有意义。如Comparable中所述,Java中的比较通常通过返回

来完成
  

负整数,零或正整数,因为此对象小于,等于或大于指定对象。

String.compareToIgnoreCase()遵循相同的规则:

Returns:
    a negative integer, zero, or a positive integer as the specified
    String is greater than, equal to, or less than this String, ignoring
    case considerations.

这些合同故意不对这些负面或正面数字的内容说什么,因此实现能够做最简单的事情。许多实现将明确返回-101,但其他实现(包括String中的实现)使用减法作为快捷方式,返回被比较项之间的差异,例如x.compareTo(y)执行return x-y。如果xy相同,则结果为0,否则如果x较小则返回负数,如果x则返回正数更大。

简而言之,您必须始终使用0作为比较点。