插入排序字符串

Insertion Sort Strings

我读取了一个包含城市及其人口的文件,我正在尝试使用插入排序按字母顺序对城市进行排序。 问题是它对除第一个元素之外的所有元素进行排序。未排序列表中的第一个值保留在已排序列表的索引 [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);
    }

知道哪里出了问题吗?

谢谢。

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

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

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

首先,这个...

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) {

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

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);
    }

例如...