如何对我的 ArrayList 实现插入排序?

How to implement insertion sort to my ArrayList?

我有这个家庭作业问题,我已经能够相当容易地完成,但我仍然坚持如何对我构建的 ArrayList 实现插入排序。

到目前为止,这是我的代码:

public class EmailDirectory 
{

public static void main(String[] args)
{
    new EmailDirectory();               //relay main menu until 3 is entered
}

public ArrayList<String> emailRecords=new ArrayList<String>();  //construct Array for directory, Array or ArrayList?

public EmailDirectory()
{
    Scanner scnr=new Scanner(System.in);    //scanner and empty string for option choice
    String menuChoice;

    do{     //do while to keep repeating
        System.out.println("Please enter the number of your option choice:");
        System.out.println("1. Add a new contact");
        System.out.println("2. Search for an exsisting contact");
        System.out.println("3. Exit");
        menuChoice=scnr.nextLine(); 

            if (menuChoice.equals("1"))     //add new contact   
            {
                addContact();
            }   

            else if (menuChoice.equals("2"))    //search contacts
            {
                searchContact();
            }
      }
    while(menuChoice.equals("3")==false);
}

private void addContact()   
{
    Scanner addCont=new Scanner(System.in);     //scanner for new contact
    String newCont;

    System.out.println("Please enter the email adress.");   //prompt for user
    newCont=addCont.nextLine();
    emailRecords.add(newCont);                  //add to array for access later
    insertionSort(emailRecords);

}

private void searchContact()    
{
    //TODO
    System.out.println(emailRecords);           //test output, change laster
}

public void insertionSort(ArrayList<String> emailrecords)   //insertion sort, pass by parameter?
{    
    int i,j;
    String key;
    ArrayList<String> inputArray=emailRecords;

    for (j=1; j<inputArray.size(); j++) 
        {
            key = inputArray.get(j);
            i = j - 1;
                while (i >= 0)
                {
                    if (key.compareTo(inputArray.get(i)) > 0) {
                    break;
                }
             String element=inputArray.get(i+1);
             element = inputArray.get(i);
             i--;
         }
         String element=inputArray.get(i+1);
         element = key;
    }
    }
}

作业问题是创建一个电子邮件目录并使用插入对其进行排序,但我似乎无法弄清楚为什么数组不会排序。我可以添加电子邮件,但是当我打印出来时只是将其附加到末尾。

建议和建议将不胜感激,非常感谢!

像这样修复排序功能:

 public void insertionSort(ArrayList<String> emailrecords)   //insertion sort, pass by parameter?
    {    
    int i,j;
    String key;
    ArrayList<String> inputArray=emailRecords;

    for (j=1; j<inputArray.size(); j++) 
        {
            key = inputArray.get(j);
            i = j - 1;
                while (i >= 0)
                {
                    if (key.compareTo(inputArray.get(i)) > 0) {
                    break;
                }
             String element=inputArray.get(i+1);             //here
             inputArray.set(i+1,inputArray.get(i));          //here
             inputArray.set(i,element);                      //here
             i--;
         }
         key=inputArray.get(i+1);
    }
    }
}

我认为您的问题不在于实际的排序。

在 insertionSort() 方法中,您传入要排序的 ArrayList 电子邮件记录。然后将其设置为等于另一个 ArrayList inputArray,然后对其进行排序。

尝试对原始 ArrayList 电子邮件记录进行排序,看看是否可行。

这是一个很棒的各种演示。 [http://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html] 单击顶部的插入排序。