繁体   English   中英

如何对我的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;
    }
    }
}

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

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

我认为您的问题与实际排序无关。

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

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

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

修复排序功能,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM