0

我想知道是否还有其他方法可以执行以下程序。下面的程序可以正常工作,但它有点大而且杂乱。如果这是编程的最佳方式,请随时留下您的解决方案!我一直在寻找不同的编程方式。-谢谢!:)

void processorSort() {

        if (headNode == nullptr) {
            return;
        }

        int end = LLsize() - 1;

        for (int i = 0; i < LLsize(); i++) {

            Node* current = headNode;
            Node* currentsNext = headNode->next;
            Node* currentsNextNext = currentsNext->next;

            for (int j = 0; j < end - i; j++) { 
                if (currentsNextNext->processorID < currentsNext->processorID) { 
          
                    current->next = currentsNextNext; 
                    currentsNext->next = currentsNextNext->next; 
                    currentsNextNext->next = currentsNext; 
                    currentsNext = currentsNextNext; 
                    currentsNextNext = currentsNextNext->next; 

                }

                current = current->next;
                currentsNext = currentsNext->next;
                currentsNextNext = currentsNextNext->next;

            }
        }
    }
4

1 回答 1

0

您的代码看起来混乱的一个原因是在循环中使用了 3 个节点指针,此时所有信息都可以从current指针中获取。此外,可以通过使用适当的算法根据需要重新链接节点来降低内部循环中代码的复杂性:

Node* current = headNode;

for (int j = 0; j < end - i; j++) 
{ 
  if (current->next->next->processorID < current->next->processorID) 
  { 
    current->next = std::exchange(current->next->next,
                      std::exchange(current->next->next->next, current->next);
  }
  current = current->next;
}

您的代码似乎正在对链表进行冒泡排序。但是,您的实现可能在某些极端情况下存在错误,因此我建议编写一堆测试来检查。但是如果需要修复,您仍然可以将上述建议应用于代码。

于 2020-11-02T01:28:38.050 回答