【问题标题】:insertion sort using linked list for Book objects使用书对象的链表进行插入排序
【发布时间】:2016-04-06 03:11:25
【问题描述】:

我正在尝试使用插入排序按标题的字母顺序对书的链接列表进行排序。

到目前为止我做了什么:

 public void insertSorted(Book book){
     if(books.getfirst()==null)
         books.addFirst(book); //books is the LinkedList name
     Node<Book> current =books.getfirst();
     for(int i=0; i<books.getSize(); i++){
        if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
             books.add(book, i);

         }
     }

链表中的add方法:

public void add(Object x,int index){
    if(index==0)addFirst(x);
    else if(index>=getSize())addLast(x);
    else{
        Node current=first;
        for(int i=0; i<index-1;i++)
            current=current.next;
        Node temp = new Node(x);
        temp.next=current.next;
        current.next=temp;
        count++;
    }
}

我到底做错了什么?

【问题讨论】:

  • 在 insertSorted 的 for 循环中,您应该检查 book[i]。 if 语句中的任何内容都不依赖于 i。
  • 第一本书重复了两次,是不是循环有问题??

标签: java linked-list insertion-sort


【解决方案1】:

将书添加到书后,需要打破循环

books.add(book,i); 打破;

【讨论】:

  • 否则会多次添加相同的书籍
【解决方案2】:
for(int i=0; i<books.getSize(); i++){
    if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
         books.add(book, i);

     }

使用此语句(如上),您不会增加正在比较的当前Node。在for(;;) 循环的每次迭代中,您都在比较新的Book,它被添加到List 的第一个元素中。

下面的代码示例应该可以解决这个问题:

for(int i=0; i<books.getSize(); i++){
    if(book.getTitle().compareToIgnoreCase(current.element.getTitle())<=0){
         books.add(book, i);
         break;
     }
    else {
        current = current.next;
    }

编辑:根据@Eden Lu 的回答,包含必需的中断语句

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多