我必须为插入排序做一个数组列表,我的老师把它发回给我并给了我一个F,但是说我可以在星期五之前补上。 我不明白为什么这不是A.L插入排序。 有人可以帮我解决这个问题吗? 感谢。
他说:
检查完第一次插入排序后,你们都做错了。我特意说要移动数字并将数字移到适当的位置而不是将数字交给地方。在MySA的任务中,我说如果你这样做,你将获得0分配。
import java.util.ArrayList;
public class AListINSSORT {
private static void insertionSort(ArrayList<Integer> arr) {
insertionSort();
}
private static void insertionSort() {
ArrayList<Integer> swap = new ArrayList<Integer>();
swap.add(1);
swap.add(2);
swap.add(3);
swap.add(4);
swap.add(5);
int prior = 0;
int latter = 0;
for (int i = 2; i <= latter; i++)
{
for (int k = i; k > prior && (swap.get(k - 1) < swap.get(k - 2)); k--)
{
Integer temp = swap.get(k - 2);
swap.set(k - 2, swap.get(k - 1));
swap.set(k - 1, temp);
}
}
System.out.println(swap);
}
}
答案 0 :(得分:2)
首先,您的老师似乎要求您使用LinkedList而不是ArrayList。它们之间存在很大差异。
其次,也许更重要的是。在你的内部循环中,你保存一个临时变量并将元素交换在位置k - 2和k - 1之间。从评论中,这不是你老师的意图。由于他希望您通过元素插入解决问题,我建议您查看LinkedList.add(int i,E e)的以下方法定义:https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#add(int,%20E)。
这应该指向正确的方向。
答案 1 :(得分:1)
据我所知,你的代码什么都不做。 外部for循环的条件
for (int i = 2; i <= latter; i++)
未履行。
当您从i = 2
开始,latter = 0
时,它永远不会保留i <= latter
。
因此,您永远不会遍历外部for循环,最后只返回输入值。
如果您以不同的顺序(尚未订购)将输入值添加到swap
,您将看到您的代码没有重新排序。
答案 2 :(得分:0)
这里有很多错误。
首先,你的方法:
private static void insertionSort(ArrayList<Integer> arr) {
insertionSort();
}
获取一个ArrayList并完全忽略它。这应该是List
,需要排序。
然后在insertionSort()
中创建一个新的ArrayList,按顺序插入一些数字,然后尝试一些看起来不像插入排序的东西,但稍微更像是冒泡排序。
因此,当您致电insertionSort(List)
时,它根本无法对列表执行任何操作,insertionSort()
中的所有工作都会发生完全不同的List
!
因为在SO上我们通常不会为他们做家庭作业,我建议在diagram上查看好看的小动画this page
你应该拥有的是:
public void insertionSort(LinkedList<Integer> numbers) {
//do stuff with numbers, using get() and add()
}