插入排序字符串

时间:2015-03-03 00:55:33

标签: java string sorting insertion-sort

我读了一个包含城市及其人口的文件,我正在尝试使用插入排序按字母顺序对城市进行排序。 问题是它排除了除第一个之外的所有元素。未排序列表中的第一个值保留在排序列表中的索引[0]中。这是代码:

    int i, j;
    String v;
    for (i = 1; i < cities.size()-1; i++)
    {
        v = cities.get(i);
        j = i;
        while (cities.get(j-1).compareToIgnoreCase(v) > 0 && j >=2)
        {
            cities.set(j, cities.get(j-1));
            j--;
        }
        cities.set(j, v);
    }

知道什么是错的吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

您可能想要for (i = 0; i < cities.size(); i++)

访问数组和列表从0开始计数,但列表/数组的实际大小从1开始计算。

示例:要访问大小为1的数组a的第一个(也是唯一的)元素,您可以使用a[0]

答案 1 :(得分:2)

首先,这......

for (i = 1; i < cities.size()-1; i++)

应该是......

for (i = 1; i < cities.size(); i++)

其次,这......

j = i;

应该是......

int j = i - 1;

第三,这......

while (cities.get(j - 1).compareToIgnoreCase(v) > 0 && j >= 2) {

一团糟。在确定值是否实际可访问之前(例如List是否在j的范围内)之前,您尝试访问List中的值,并且可能应该更像。{1}}。 ..

while ((j > -1) && (cities.get(j).compareToIgnoreCase(key) > 0)) {

说了这么多,这意味着cities.set(j, cities.get(j - 1));需要成为cities.set(j + 1, cities.get(j));cities.set(j, v);需要成为cities.set(j + 1, key);

像...一样的东西。

    List<String> cities = new ArrayList<>(25);
    cities.add("D");
    cities.add("C");
    cities.add("B");
    cities.add("A");

    for (int i = 1; i < cities.size(); i++) {
        String key = cities.get(i);
        int j = i - 1;
        while ((j > -1) && (cities.get(j).compareToIgnoreCase(key) > 0)) {
            cities.set(j + 1, cities.get(j));
            j--;
        }
        cities.set(j + 1, key);
    }

例如......