【问题标题】:How to implement insertion sort to my ArrayList?如何对我的 ArrayList 实现插入排序?
【发布时间】:2015-04-22 17:34:42
【问题描述】:

我有这个作业问题,我已经能够相当容易地完成,但我坚持如何对我构建的 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;
    }
    }
}

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

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

【问题讨论】:

  • 是时候调试你的程序了。尝试使用调试器逐步执行此操作,或者至少添加一些打印语句,以确定程序的执行何时与您的期望不同。尝试将其缩小到一行。
  • 提示:“插入排序”这个名称意味着在算法过程中的某处插入了
  • 我没有看到像 inputArray.set(...) 这样的东西。
  • 声明一个新的List并从旧列表中逐个删除对象并按顺序插入到新的List中可能会更容易。
  • 如果您没有绑定到 ArrayList,您可能会发现双向链表(可能是 LinkedList)在这里是更好的选择。这样你就不需要在数组中移动东西(你需要做的事情,但此时实际上并没有做)。

标签: java arraylist insertion-sort


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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);
        }
        }
    }
    

    【讨论】:

    • 该死,我应该在一英里外看到那...谢谢,这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多