【发布时间】:2017-06-04 00:20:28
【问题描述】:
我正在使用我的链接列表进行插入排序,但遇到了一个问题。
我的数据文件:
Myjob 66
Junk 17
Fun 25
Vital 99
Important 96
MoreFun 28
Work 69
Assignment 44
这是我的插入排序代码
public Node insertSort(Node node){
Node sortedNode = null;
while(node != null){
Node current = node;
node = node.next;
Node x;
Node previous = null;
for(x = sortedNode; x != null; x = x.next){
if(current.getData().getNum() > x.getData().getNum()){
break;
}
previous = x;
}
if(previous == null){
current.next = sortedNode;
sortedNode = current;
}
else{
current.next = previous.next;
previous.next = current;
}
}
sortedNode=head;
return sortedNode; }
我目前的输出:
Name = Myjob Priority=66
Name = Assignment Priority=44
Name = MoreFun Priority=28
Name = Fun Priority=25
Name = Junk Priority=17
null
他们跳过大于 66 的任何内容。有没有人知道如何解决这个问题,所以它可以从 99 显示到 17?我尝试重新排列文本文件中的顺序,最高的在前。那么程序就可以完美的进行从99到17的排序了。但是使用原始顺序,我的程序只能执行从 66 到最低的排序。我不知道为什么,以及如何解决?请帮忙。我对 Java 很陌生。非常感谢。
我的数据类
public class Data {
private String name;
private int num;
public Data(){
}
public Data(String name,int num){
this.name=name;
this.num=num;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getNum(){
return num;
}
public void setNume(int num){
this.num=num;
}
public String toString()
{
return "Name = " + name + " Priority=" + num ;
}
}
这是我的 LinkedList 类:
public class LinkedList {
Node head;
Node prev;
Node cur;
public LinkedList(){
}
public LinkedList(Node head){
head = null;
}
//getter to get head
public Node gethead(){
return head;
}
public void printLinkedList(){
System.out.println(head);
}
public void initializeLL(){
Node currentNode = head;
try
{
File file = new File("Asg2Data.txt");
Scanner sc = new Scanner(file);
while (sc.hasNext())
{
Data d = new Data(sc.next(), sc.nextInt());
Node n = new Node(d);
if(currentNode == null){
currentNode = n;
head = n;
}else{
currentNode.setNext(n);
currentNode = n;
}
}
sc.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public static void main(String[] args) throws FileNotFoundException{
LinkedList l1 = new LinkedList();
l1.initializeLL();
l1.insertSort(l1.head);
l1.printLinkedList();
System.out.println("************");
}
}
这是我的节点类:
public class Node{
Data dt;
Node next;
public Node(){
}
public Node(Data dt){
this.dt=dt;
}
public Node getNext(){
return next;
}
public void setNext(Node next){
this.next=next;
}
public Data getData(){
return dt;
}
public void setData(Data dt){
this.dt=dt;
}
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(dt).append(System.getProperty("line.separator"));
sb.append(next).append(System.getProperty("line.separator"));
return sb.toString();
}
}
insertionSort 方法在 LinkedList 类中。
【问题讨论】:
-
当您需要将项目添加到列表的开头时,您的问题似乎发生了。
-
我也找到了。但我不知道如何修复我的代码。你能帮我吗?
-
@nhouser9 我刚刚添加了其余的代码。请看一下并提供帮助。非常感谢。
-
您希望插入排序做什么?对整个列表进行排序?当我想到插入排序时,我想到的是在插入每个项目时对其进行排序,这不是这里发生的事情,因为您从文件初始化列表然后对其进行排序。
-
@nhouser9 那么我该如何修复我的代码呢?我卡住了。我是java新手。所以我对这些排序没有太多经验。可以给我看看吗?
标签: java sorting linked-list