如何对我的 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]
单击顶部的插入排序。
我有这个家庭作业问题,我已经能够相当容易地完成,但我仍然坚持如何对我构建的 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] 单击顶部的插入排序。