Java 使用插入排序对对象的arraylist进行排序
这是我使用选择的代码。我需要使用插入,不使用临时数组或arraylist。我需要关于如何进行插入排序的帮助Java 使用插入排序对对象的arraylist进行排序,java,Java,这是我使用选择的代码。我需要使用插入,不使用临时数组或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; count
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);
}
}
}
公共静态无效排序学生(ArrayList列表)
{//选择排序
学生临时工;
int count1;
int count2;
int最大;
对于(count1=0;count1如果变量仅在循环中使用,则不在循环外定义变量。限制变量的生存期可以更容易地对代码进行推理
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);
}
}
公共静态无效排序学生(ArrayList列表)
{
int最大;
对于(int i=0;i
更多的缩进会使代码更具可读性。那么具体的错误是什么呢?它不是编译、抛出异常还是产生错误的结果
在内部循环中有一些可疑的东西:
largest = 0;
for (int j=largest + 1; j < list.size () - i; j++)
max=0;
对于(int j=最大+1;j
如果您将最大值设置为0,那么j将被初始化为0+1=>1
。我猜您还有另一个意图。您的意思是j=I+1;
?选择排序和插入排序的工作原理非常相似,列表中有一个“尚未排序”部分和一个“已排序”部分部分。开始时,第一部分是整个列表,第二部分是开始或结束时的空列表。排序时,“尚未排序”部分缩小,而“已排序”部分增加,每次迭代一个元素
选择排序和插入排序的区别如下:
- 对于选择排序,搜索“尚未排序”部分的最小(或最大)元素,将其删除,然后将其添加到已排序部分的末尾(或开头)
- 对于插入排序,取列表中“尚未排序”部分的下一个元素,在“已排序”部分中找到它的插入点,并将其插入
这应该足以让你的选择排序变成插入排序。
我喜欢午夜的作业的味道。有一个很好的解释和伪代码,这应该不仅仅是编译和运行好。而是一个选择排序。我需要一个插入排序。我已经阅读了一些关于插入的注释,我可以排序。int[]我不知道如何做arraylist。问题到底在哪里?您使用list.size()
,而不是arr[i]-arr[j]来代替arr.length
您使用上面使用的compareTo
。您还知道如何交换;您应该将其作为一个单独的方法,因为它是一个定义良好、可重用的作业,可以自行测试。
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);
}
}
}