Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按姓名和出生日期对链接列表排序_Java_Sorting_Linked List - Fatal编程技术网

Java 按姓名和出生日期对链接列表排序

Java 按姓名和出生日期对链接列表排序,java,sorting,linked-list,Java,Sorting,Linked List,我遇到了一些困难。我想修改下面的这段代码,对Person类型的单链接列表进行排序。例如,我有: class Person{ private String fn = "NN"; private String ln = "NN"; private Date dob = new Date(1, 1, 1970); } 我想按名字、姓氏和出生日期对相关人员名单进行排序。与此同时,我已经得到了一段代码来适应它,但我似乎找不到一个解决办法。我们将非常感谢您的帮助。下面是要修改的代码

我遇到了一些困难。我想修改下面的这段代码,对Person类型的单链接列表进行排序。例如,我有:

class Person{
    private String fn = "NN";
    private String ln = "NN";
    private Date dob = new Date(1, 1, 1970);
}
我想按名字、姓氏和出生日期对相关人员名单进行排序。与此同时,我已经得到了一段代码来适应它,但我似乎找不到一个解决办法。我们将非常感谢您的帮助。下面是要修改的代码:

public void sort() {

    TextIO.putln("sorting...");
    if (head == null)
        return;

    Node max, t, out = null, h = new Node();
    h.next = head;

    while (h.next != null) {
        // display(); 
        TextIO.putln("max=" + (max = findmax(h)).next);
        t = max.next;
        max.next = t.next;
        t.next = out;
        out = t;
    }
    head = out;

}

private Node findmax(Node h) {
    char max = '\0';
    Node maxNode = h;
    for (Node tmp = h; tmp.next != null; tmp = tmp.next) {
        if (tmp.next.data.c >= max) {
            max = tmp.next.data.c;
            maxNode = tmp;
        }
    }
    return maxNode;
}
如果没有,详细的建议将非常有用,谢谢。请注意,我不能使用collection.sort或任何其他就绪函数,它必须实现


谢谢

首先我想让你看看。它将让您了解如何实现节点类,以及通常如何实现列表

假设您阅读了链接中的内容,这里有一些评论

public void sort(){
//此方法对列表进行升序排序
text.putln(“排序…”);
if(head==null)
回来
Node max,t,out=null,h=new Node();
h、 next=head;//创建新列表节点让他指向列表的开头(head)
而(h.next!=null){//,直到我们到达列表的末尾
//显示();
TextIO.putln(“max=”+(max=findmax(h)).next);
//findmax完成后,我们知道参考
//到包含最大值的节点
//我们需要把这个节点放到列表的开头
//这需要一些参考布线
//首先将t设置为从最大值指向下一个节点
t=最大下一个;
//最大节点将指向t中的下一个节点
//这样,max节点将从列表中分离
max.next=t.next;
//现在,max节点将指向表示新列表头的某个节点
//不是新名单,只是新的名单头
t、 下一个=输出;
out=t;
} 
//完成排序后,只需将列表头指向已排序的列表
头部=外侧;
} 
//查找包含从某个节点开始的最大值的节点
私有节点findmax(节点h){
//声明max是空字符
字符最大值='\0';
//将maxNode设置为当前节点
节点maxNode=h;
//从电流h开始遍历所有节点
对于(节点tmp=h;tmp.next!=null;tmp=tmp.next){
//如果列表中某个节点的数据大于我们的最大值
if(tmp.next.data.c>=max){
//然后我们将把这个新值设为max
max=tmp.next.data.c;
//并将maxNode设置为具有最大值的节点
maxNode=tmp;
} 
} 
返回maxNode;
} 
我的建议是查看提供的链接,然后开始使用好的旧笔和纸。这是理解列表指针和节点的最佳方式。 但如果你不想要笔和纸,你可以去那将向你展示基本列表操作的动画