我正在尝试对双重 LL 使用插入排序。下面的代码是解决这个问题的最优化方法,还是有其他方法? [关闭]

问题描述 投票:0回答:0
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语句用于当键指针指向的元素需要移动时到前面的某个地方。

c++ data-structures linked-list doubly-linked-list
© www.soinside.com 2019 - 2024. All rights reserved.