这是我在Java中对双链表的插入排序的实现。我检查了很多值,它给了我正确的输出。我的问题是:


我不知道如何计算算法时间,我的意思是O(n)
可以优化吗?谁能指出更优化的代码?


注意:代码使用哨兵节点指向链表的开头,即哨兵节点。下一个指向链表的起始节点和哨兵节点.PREV指向链表的最后一个节点,头指向哨兵节点。

public void sortInsertionAsce(){
            DListNode marker,aheadOfCurrent;;
            DListNode current = head.getNext();
            aheadOfCurrent = current.getNext();
            marker=current;
            while(aheadOfCurrent.getNext()!=current){
            if(marker.getItem()>aheadOfCurrent.getItem()){
                swap(aheadOfCurrent,marker);
                marker=aheadOfCurrent;
                    while(aheadOfCurrent.getPrev()!=current){
                        aheadOfCurrent=aheadOfCurrent.getPrev();
                        if(aheadOfCurrent.getPrev().getItem()>aheadOfCurrent.getItem()){
                            swap(aheadOfCurrent.getPrev(),aheadOfCurrent);
                        }
                    }
                    aheadOfCurrent=marker;
                }
                    marker=aheadOfCurrent;
                    aheadOfCurrent=aheadOfCurrent.getNext();
            }
         }

最佳答案

它是O(N ^ 2),因为1个嵌套循环。所有2个循环遍历所有列表

09-30 23:23