这是我在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个循环遍历所有列表