这是我使用选择的代码。我需要使用插入,不要使用临时数组或arraylist。我需要有关如何进行插入排序的帮助。
public static void sortStudents(ArrayList<Student> list)
{//selection sort
Student tempStudent;
int count1;
int count2;
int largest;
for (count1=0; count1<list.size()-1; count1++)
{
largest = 0;
for (count2=largest+1; count2<list.size()-count1; count2++)
{
if ((list.get(largest)).compareTo(list.get(count2)) < 0)
{
largest = count2;
}
}
tempStudent = list.get(list.size()-1-count1);
list.set(list.size()-1-count1, list.get(largest));
list.set(largest, tempStudent);
}
}
}
答案 0 :(得分:0)
如果仅在循环中使用变量,则不在循环外定义变量。限制变量的生命周期使得更容易推理代码。
public static void sortStudents (ArrayList<Student> list)
{
int largest;
for (int i=0; i < list.size () - 1; i++)
{
largest = 0;
for (int j=largest + 1; j < list.size () - i; j++)
{
if ((list.get (largest)).compareTo (list.get (j)) < 0)
{
largest = j;
}
}
Student tempStudent = list.get (list.size () - 1 - i);
list.set (list.size () - 1 - i, list.get (largest));
list.set (largest, tempStudent);
}
}
更多缩进使您的代码更具可读性。现在你的具体错误是什么 - 它不编译,抛出异常还是产生错误的结果?
这是内循环中可疑的东西:
largest = 0;
for (int j=largest + 1; j < list.size () - i; j++)
如果将max设置为0,则j将初始化为0 + 1 => 1
。我想你有另一个意图。你是说j = i + 1;
吗?
答案 1 :(得分:0)
选择排序和插入排序的工作方式非常相似,具有列表的“尚未排序”部分和“已排序”部分。在开始时,第一个是整个列表,第二个是开始或结束时的空列表。虽然排序“尚未排序”的部分缩小,而“已经排序”的部分增长,每次迭代一个元素。
选择排序和插入排序之间的区别是:
这应该足以将您的选择排序更改为插入排序。