Java 插入排序字符串

Java 插入排序字符串,java,string,sorting,insertion-sort,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).com

我读了一个关于城市及其人口的文件,我试图用插入排序法按字母顺序对城市进行排序。 问题是它对除第一个元素之外的所有元素进行排序。未排序列表中的第一个值保留在排序列表的索引[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);
    }
inti,j;
字符串v;
对于(i=1;i0&&j>=2)
{
cities.set(j,cities.get(j-1));
j--;
}
城市。集(j,v);
}
知道怎么了吗


谢谢。

您可能想要(i=0;i

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


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

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

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

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

for (i = 1; i < cities.size(); i++)
int j = i - 1;
第三,这个

j = i;
while (cities.get(j - 1).compareToIgnoreCase(v) > 0 && j >= 2) {
真是一团糟。在确定值是否实际可访问(即如果
j
列表
的范围内)之前,请尝试从
列表
中访问该值,该值可能更像

while ((j > -1) && (cities.get(j).compareToIgnoreCase(key) > 0)) {
话虽如此,这意味着
cities.set(j,cities.get(j-1))将需要变成
cities.set(j+1,cities.get(j))
城市集(j,v)将需要变成
城市。设置(j+1,键)

类似于

    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);
    }
List cities=newarraylist(25);
城市。添加(“D”);
城市。添加(“C”);
城市。添加(“B”);
城市。添加(“A”);
对于(int i=1;i-1)和&(cities.get(j.compareTignoreCase(key)>0)){
cities.set(j+1,cities.get(j));
j--;
}
城市。设置(j+1,键);
}
例如…

首先,这个

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

for (i = 1; i < cities.size(); i++)
int j = i - 1;
第三,这个

j = i;
while (cities.get(j - 1).compareToIgnoreCase(v) > 0 && j >= 2) {
真是一团糟。在确定值是否实际可访问(即如果
j
列表
的范围内)之前,请尝试从
列表
中访问该值,该值可能更像

while ((j > -1) && (cities.get(j).compareToIgnoreCase(key) > 0)) {
话虽如此,这意味着
cities.set(j,cities.get(j-1))将需要变成
cities.set(j+1,cities.get(j))
城市集(j,v)将需要变成
城市。设置(j+1,键)

类似于

    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);
    }
List cities=newarraylist(25);
城市。添加(“D”);
城市。添加(“C”);
城市。添加(“B”);
城市。添加(“A”);
对于(int i=1;i-1)和&(cities.get(j.compareTignoreCase(key)>0)){
cities.set(j+1,cities.get(j));
j--;
}
城市。设置(j+1,键);
}

例如,对于(i=1;i
??Java数组是零索引的…为什么不使用(i=1;i集合.sort
??Java数组是零索引的…你为什么不使用
集合。排序
?我不能从I=0开始,因为j=0和我比较了索引[j-1]中的一个元素。我不能从I=0开始,因为j=0和我比较了索引[j-1]中的一个元素。谢谢你提供的详细答案,但问题是在这种情况下。它的顺序应该与此相反:j>0&&cities.get(j-1).compareTignoreCase(v)>0再次感谢您的详细帮助!我最初试过,但似乎不起作用,有些我重新编写了整个代码谢谢你的详细回答,但问题仍然存在。它的顺序应该与此相反:j>0&&cities.get(j-1).compareTignoreCase(v)>0再次感谢您的详细帮助!我最初尝试过,但似乎不起作用,有些我重新编写了整个代码