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--;
}
不知怎么的,这个排序算法没有产生排序结果。有人知道为什么吗?我在这里排除的 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--;
}