Java 使用插入排序对对象的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

这是我使用选择的代码。我需要使用插入,不使用临时数组或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);
  }
 }
}
公共静态无效排序学生(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);
  }
 }
}