使用帮助器方法在java中插入排序不起作用。有人看到我错过的东西吗?

时间:2016-07-17 00:13:20

标签: java algorithm sorting insertion-sort

不知何故,这种排序算法不会产生排序结果。谁知道为什么?我在此处排除的类中有一个getAge()方法和age字段。

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

2 个答案:

答案 0 :(得分:0)

在我看来,你正试图解决已经解决过的问题。

怎么样

Arrays.sort(list)

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

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

插入排序意味着您插入的结构将在您插入时进行排序。从我们在您的示例代码中看到的内容看起来更像是在尝试对某些插入进行排序。 如果您想要插入排序,我建议treeset假设您的列表中有唯一的项目。

答案 1 :(得分:0)

这里有快速解决你的问题,因为看起来你正在减少j保持我不变

所以对于例子来说  array = 1 2 0 4

我指向0 j指向2

每次交换后我都会指向相同的索引,并且j继续递减 因为在交换时存在问题,它应该在adjecent元素之间而不是远程元素

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