有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对LinkedList进行java排序

我在整理我的链接列表时遇到了问题。有人能帮我一下,让我知道我做错了什么吗? 我需要整理一下并把它列在一个列表里。 如果你能给我一些提示,用一个新方法public void print()打印列表的末尾

    public class SortedLinkedList<T extends Comparable<? super T>>
             extends LinkedList<T> 
    {
        private LinkedList<T> list;  //the sorted list

        //the constructor
        public SortedLinkedList(LinkedList<T> in)
        {
            if(in.isEmpty())
            {
                System.out.println("Empty list");
            }
            else
            {
                 LinkedList<T> first = new LinkedList<T>(in.subList(0, in.size()/2));
                 LinkedList<T> second = new LinkedList<T>(in.subList(in.size   ()/2,in.size()));
                 LinkedList<T> sortList = new LinkedList<T>();

                 int i = 0;
                 int j = 0;
                 while(i<first.size() && j<second.size())
                 {
                     if(first.get(i).equals(second.get(j)) || first.get(i).compareTo(second.get(j))<0)
                     {
                          sortList.add(first.get(i));
                          i++;
                     }
                     else
                     {
                          sortList.add(second.get(j));
                          j++;
                     }
                     if(i == first.size())
                     {
                          for(int k = j; k<second.size(); k++)
                          {
                              sortList.add(second.get(k));
                          }
                     }
                     else
                     {
                          for(int x = i; x<first.size(); x++)
                          {
                              sortList.add(first.get(x));
                     }
                }

            }
         }
     }
    }

共 (2) 个答案

  1. # 1 楼答案

    似乎您正在尝试实现Mergesort。如果我的假设是正确的,您将忘记调用子列表上的mergesort。递归地。伪代码中的粗略算法为:

    mergesort(list)
        left = list[:len(list/2)]
        right = list[len(list/2):]
    
        mergesort(left)
        mergesort(right)
    
        merge(left, right) # that would be your while loop
    

    编辑:除非您真的需要实现自己的算法,否则我建议使用JavaAPI中的Collections.sort

  2. # 2 楼答案

    在编写自己的排序之前,请尝试Collections.sort。如果您需要自己的排序顺序,请使用比较器

    补充:在大多数情况下,LinkedList是错误的数据结构——特别是在需要对其进行排序的情况下