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

时间:2015-04-22 17:34:43

标签: java arraylist insertion-sort

我有这个家庭作业问题,我能够相当容易地做到,但我仍然坚持如何对我构建的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;
    }
    }
}

功课问题是创建一个电子邮件目录并使用插入对其进行排序,但我似乎无法弄清楚为什么数组不会排序。我能够添加电子邮件,但是当我将其打印出来时,只需将其添加到最后。

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

2 个答案:

答案 0 :(得分:0)

我不认为你的问题与实际排序有关。

在insertionSort()方法中,您传入一个ArrayList emailrecords进行排序。然后,您将其设置为等于另一个ArrayList inputArray,然后对其进行排序。

尝试只排序原始的ArrayList电子邮件记录,看看是否有效。

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

答案 1 :(得分:-2)

修复排序函数,如下所示:

 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);
    }
    }
}