在Java中使用一种方法对单链表进行排序
实现一个链表,最多可存储10个名称,按先进先出的顺序排列。然后实现两种方法,其中一种按姓氏的字母顺序排序。这就是我遇到麻烦的地方。以下是我尝试过的:在Java中使用一种方法对单链表进行排序,java,list,sorting,Java,List,Sorting,实现一个链表,最多可存储10个名称,按先进先出的顺序排列。然后实现两种方法,其中一种按姓氏的字母顺序排序。这就是我遇到麻烦的地方。以下是我尝试过的: 递归。该方法调用两个节点,比较它们,根据需要交换,然后调用自身。不能处理奇数个名称,而且往往是完全错误 收集,但我对它了解不够,无法有效地使用它 排序算法(例如气泡排序):我可以浏览列表,但很难让节点交换 我的问题是:最简单的方法是什么 public class List { public class Link {
public class List
{
public class Link
{
public String firstName;
public String middleName;
public String lastName;
public Link next = null;
Link(String f, String m, String l)
{
firstName = f;
middleName = m;
lastName = l;
}
}
private Link first_;
private Link last_;
List()
{
first_ = null;
last_ = null;
}
public boolean isEmpty()
{
return first_ == null;
}
public void insertFront(String f, String m, String l)
{
Link name = new Link(f, m, l);
if (first_ == null)
{
first_ = name;
last_ = name;
}
else
{
last_.next = name;
last_ = last_.next;
}
}
public String removeFront()
{
String f = first_.firstName;
String m = first_.middleName;
String l = first_.lastName;
first_ = first_.next;
return f + " " + m + " " + l;
}
public String findMiddle(String f, String l)
{
Link current = first_;
while (current != null && current.firstName.compareTo(f) != 0 && current.lastName.compareTo(l) != 0)
{
current = current.next;
}
if (current == null)
{
return "Not in list";
}
return "That person's middle name is " + current.middleName;
}
}
public class NamesOfFriends
{
public static void main(String[] args)
{
List listOfnames = new List();
Scanner in = new Scanner(System.in);
for(int i = 0; i < 3; i++)
{
if(i == 0)
{
System.out.println("Please enter the first, middle and last name?");
listOfnames.insertFront(in.next(), in.next(),in.next());
}
else
{
System.out.println("Please enter the next first, middle and last name");
listOfnames.insertFront(in.next(), in.next(),in.next());
}
}
System.out.println("To find the middle name, please enter the first and last name of the person.");
System.out.println(listOfnames.findMiddle(in.next(),in.next()));
}
}
2:收集是最容易的,但你的家庭作业中似乎不允许收集
3:BubbleSort很简单,但它是已知最差的排序算法,不过对于你的家庭作业来说,它可能还可以
1:这与冒泡排序相同,但最好不使用递归进行排序
在BubbleSort中,您一次又一次地循环您的元素,直到不再需要交换,然后您就准备好了。2:收集是最简单的,但在您的家庭作业中似乎不允许这样做
3:BubbleSort很简单,但它是已知最差的排序算法,不过对于你的家庭作业来说,它可能还可以
1:这与冒泡排序相同,但最好不使用递归进行排序
在BubbleSort中,您一次又一次地循环您的元素,直到不再需要交换,然后您就准备好了。收集是实现这一点的最简单方法
- 实施可比的
- 覆盖
和hashcode
等于
Collection.sort()
- 实施可比的
- 覆盖
和hashcode
等于
Collection.sort()
- 您已经实现了链表,这很好
您是否考虑过实现MergeSort作为排序算法?作为分而治之的算法,您将始终只使用两个元素来形成一个列表
合并部分将更加复杂,但也很容易。基本上,您只需创建一个新列表,并开始使用通过比较两个合并集的第一个值得到的元素填充它
例如,如果要合并两个集合:
[A]->[C]->[D]
[B]->[E]->[F]
梅金过程将是:
[A]
[C]->[D]
[B]->[E]->[F]
您已经实现了链表,这很好 您是否考虑过实现MergeSort作为排序算法?作为分而治之的算法,您将始终只使用两个元素来形成一个列表 合并部分将更加复杂,但也很容易。基本上,您只需创建一个新列表,并开始使用通过比较两个合并集的第一个值得到的元素填充它 例如,如果要合并两个集合:
[A]->[C]->[D]
[B]->[E]->[F]
梅金过程将是:
[A]
[C]->[D]
[B]->[E]->[F]
请不要使用家庭作业标签。请不要使用家庭作业标签。
[A]->[B]->[C]
[D]
[E]->[F]
[A]->[B]->[C]->[D]
[E]->[F]
[A]->[B]->[C]->[D]->[E]
[F]
[A]->[B]->[C]->[D]->[E]->[F]