插入排序内生的卡片列表

时间:2014-03-02 21:43:46

标签: java compare insertion-sort

我有一种方法可以在内生的双向链表中对一张牌进行排序。

public void sort(Comparator<Card> cmp) {
// source code that I am adapting my code from
 //          for (int i=0; i < a.length; i++) {
 //                 /* Insert a[i] into the sorted sublist */
//                  Object v = a[i];
//                  int j;
//                  for (j = i - 1; j >= 0; j--) {
//                      if (((Comparable)a[j]).compareTo(v) <= 0) break;
//                      a[j + 1] = a[j];
//                  }
//                  a[j + 1] = v;
//              }

        for(Card f = first; f!=null; f = f.next){
            Card insert = f;
            for(Card l = last; l!=null || l!= f; l = l.prev)
            {
                Card compare = l;
                if(cmp.compare(compare, insert) <=0) 

                    remove(insert);
                    this.add(insert);
                    break;

            }
        }


        // Make sure to test invariant before and after
        // You may find it helpful to use "remove" (but watch about size!)
    }

当我运行此代码时,它没有正确排序。有什么指针吗?

1 个答案:

答案 0 :(得分:0)

快速浏览一下,我看到三个漏洞。可能会有更多。

  • 而不是l != null || l != f,我很确定你想要&& - 你所写的条件总是如此。
  • 您应该使用{}来分隔if的“真实”分支。目前,无论this.add(insert);条件是真还是假,break;if都会运行 - 而且您的缩进表明这不是您所期望的。
  • this.add(insert)中,您没有指定列表中添加新节点的位置。我希望看到一些内容,指明您将在l指示的位置添加它。