这是我在java中为双向链表实现的插入排序。我检查了很多值,它给了我正确的输出。我的问题是:
注意:代码使用Sentinel节点指向链接列表的起始点,即sentinel node.next指向链表和发送节点的起始节点.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();
}
}
答案 0 :(得分:0)
它是O(N ^ 2),因为1个嵌套循环。并且所有2个循环遍历所有列表