使用冒泡排序进行链接列表排序

时间:2015-04-07 04:26:25

标签: java algorithm linked-list

我试图使用冒泡排序对链接列表进行排序。但是我写的算法并不起作用。任何人都可以帮助我吗?

还有一个链接类。

链接类

public class Link {
    public int iData;
    public String sData;
    public Link next;

    public Link(int id,String sd)
    {
    iData =id;
    sData =sd;
    next = null;
    }
    public void displayLink()
    {
    System.out.println(iData+""+sData); 
    }
    }

LinkKist类包括排序算法。

public class LinkedList {

    private Link first;

    public void LinkList() {

        first = null;

    }

  public void insertFirst(int idata, String sdata) {
        Link nl1 = new Link(idata, sdata);

        nl1.next = first;
        first = nl1;
    }

public void displayList() {
    System.out.println("List : ");
    Link current = first;
    while (current != null) {
        current.displayLink();
        current = current.next;
    }
    System.out.println("");
}

    public void sortll(){


        Link current = first;
        Link nextLink = first.next;

        while(current.next != null){

            while(nextLink.next != null)

            if(nextLink.iData < current.iData){

                Link temp = nextLink;
                nextLink = current;
                current = temp;

                nextLink = nextLink.next;
                current = current.next;

            }

        current = current.next;
        }


    }
}

测试应用。

public class LLtest {

    public static void main(String[] args) {

        LinkedList ll1 = new LinkedList();

        ll1.insertFirst(11, "UWU0011");
        ll1.insertFirst(3, "UWU0003");
        ll1.insertFirst(1, "UWU0001");
        ll1.insertFirst(4, "UWU0004");
        ll1.insertFirst(5, "UWU0005");
        ll1.insertFirst(6, "UWU0006");
        ll1.insertFirst(7, "UWU0007");
        ll1.insertFirst(10, "UWU0010");
        ll1.insertFirst(9, "UWU0009");
        ll1.insertFirst(2, "UWU0002");
        ll1.insertFirst(8, "UWU0008");



        ll1.sortll();


        ll1.displayList();
    }
}
谁能帮助我?????

2 个答案:

答案 0 :(得分:0)

您的排序算法存在问题,我觉得您没有进行冒泡排序。我添加了sortll()方法,该方法交换链表数据但不交换链接。我认为你正在尝试交换链接,如果你这样做,那么你需要更仔细地交换链接,因为你需要仔细考虑最终案例。替换sortll()方法并检查它

public void sortll(){


    Link current = first;
     System.out.println(first.iData);
    Link nextLink = first.next;
    /*while(current.next != null){

        while(nextLink.next != null)

        if(nextLink.iData < current.iData){

            Link temp = nextLink;
            nextLink = current;
            current = temp;

            nextLink = nextLink.next;
            current = current.next;

        }

    current = current.next;
    }*/
    int length=0;
    while(current!=null)
    {
        length++;
        current=current.next;
    }
    System.out.println(length);

    for(int i=0;i<length;i++)
    {
         Link temp=first;
        for(int j=0;j<length-i-1;j++)
        {
            if(temp.iData>temp.next.iData)
            {
                int tempiData = temp.iData;
                String tempsData =temp.sData;
                temp.iData =temp.next.iData;
                temp.sData =temp.next.sData;
                temp.next.iData=tempiData;
                temp.next.sData=tempsData;
            }
            temp=temp.next;
        }
    }


}
}

答案 1 :(得分:0)

这适用于上述问题。

public class LinkedList {

        private Link first;

        public void LinkList() {

            first = null;

        }

    public void sortingLinkList(){   //working 

        boolean flag = true;
        while (flag) {
            flag = false;

            Link position = first;
            Link positionNext = position.next;
            Link positionPrev = null;

            while (positionNext != null) {
                if(position.iData > positionNext.iData) {

                    Link temp = position;
                    Link tempNextNext = positionNext.next;
                    position = positionNext;
                    position.next = temp;
                    positionNext = temp;
                    positionNext.next = tempNextNext;

                    if (positionPrev == null) { // position is head
                        first = position;
                    } else {
                        positionPrev.next = position;
                    }

                    flag = true;
                }
                positionPrev = position;
                position = position.next;
                positionNext = position.next;
            }
        }
        }
    }