java 中使用辅助方法的插入排序不起作用。有人看到我错过了什么吗?

Insertion-sort in java with helper method don't work. Anyone see what I'm missing?

不知怎么的,这个排序算法没有产生排序结果。有人知道为什么吗?我在这里排除的 class 中有一个 getAge() 方法和年龄字段。

 @Override
    public int compareTo(Person person)
    {
        int anotherAge = person.getAge();
        return (age<anotherAge ? -1 : (age==anotherAge ? 0 : 1));

    }
}
public static Person[] insertionSort(Person[] list)
{
    int i, j;
    Person key, temp;
    for(i = 1; i<list.length; i++)
    {
        key= list[i];
        j = i-1;
        while(list[i].compareTo(list[j]) < 0)
        {
            temp = list[j];
            list[j] = list[j+1];
            list[j+1] = temp;
            j--;
        }
    }
    return list;
}

在我看来,您正在尝试解决一个已经解决的问题。

怎么样

Arrays.sort(list)

或者,如果您希望它的顺序与 comparable 实施相反。

Collections.reverse(Arrays.asList(Arrays.sort(list));

插入排序意味着您要插入的结构将在您插入时进行排序。从我们在您的示例代码中看到的情况来看,您似乎更像是在尝试在一些插入后进行排序。 如果你想要插入排序,我会推荐 treeset 假设你的列表中有独特的项目。

好吧,这里是您问题的快速解决方案,因为您似乎在递减 j 以保持 i 不变

例如 数组 =1 2 0 4

i 指向 0 j 指向 2

i 在每次交换后继续指向相同的索引并且 j 继续递减 因此在交换时存在问题,它应该在相邻元素之间而不是远处元素

 key= list[i];
        j = i-1;
       int k=i;
        while(j>=0&& list[k].compareTo(list[j]) < 0 )
        {
            temp = list[j];
            list[j] = list[j+1];
            list[j+1] = temp;
            j--;
        k--;
        }