void LinkedList::insertionSort(){
current = head;
Node* temp;
Node* key;
for (int i = 1; i<listLength; i++){
temp = current;
key = temp->getNext();
for (int j = 0; j<i; j++){
if (key->getData() < temp->getData()){
if (temp->getPrev() != NULL){
if (key->getData() < temp->getPrev()->getData()){
temp = temp->getPrev();
}
else {
if (key->getNext() != NULL){
key->getPrev()->setNext(key->getNext());
key->getNext()->setPrev(key->getPrev());
}
else{
key->getPrev()->setNext(NULL);
}
temp->getPrev()->setNext(key);
key->setPrev(temp->getPrev());
key->setNext(temp);
temp->setPrev(key);
back();
break;
}
}
else {
if (key->getNext() != NULL){
key->getPrev()->setNext(key->getNext());
key->getNext()->setPrev(key->getPrev());
}
else{
key->getPrev()->setNext(NULL);
}
temp->setPrev(key);
key->setNext(temp);
key->setPrev(NULL);
head = key;
back();
break;
}
}
}
forward();
}
current = head;
}
我使用了两个for循环(首先遍历每个元素对其进行排序,其次检查要移动的元素前面的元素)。if语句用于当键指针指向的元素需要移动时到前面的某个地方。