链表的插入排序

相对于在数组上进行插入排序,链表的插入排序效率会更高一点,更形象(因为的确是插入的)。假设序列a[0..n-1],a[0..j]是已排序的子序列,a[j+1]是待插入的元素。那么数组的插入排序时,不仅需要元素的比较,还要进行元素移动。而链表的插入排序时,仅仅需要通过比较找到插入位置,然后执行插入即可。所以,链表的排序中,插入排序是相对效率较高的排序

 void List::insertSort(){ Node *headNode=new Node(head,0);//链表头结点 Node *last=head;// 已排序链表的尾 Node *now; //当前待插入节点 while(last->getNext()!=NULL){ now=last->getNext(); for(Node *iter=headNode;iter!=now;){ if(iter->getNext()->getData() < now->getData()) iter=iter->getNext(); else{///找到插入位置,在iter后 if(iter==last){ last=last->getNext(); } else{ last->setNext(now->getNext()); now->setNext(iter->getNext()); iter->setNext(now); } break; } } } head=headNode->getNext(); }

你可能感兴趣的:(链表的插入排序)