实现一个函数模板,以带头结点的单链表为存储结构实现简单选择排序
时间: 2023-11-27 09:49:51 浏览: 96
有头结点的单链表表的实现
下面是一个以带头结点的单链表为存储结构实现简单选择排序的函数模板:
```c++
template<typename T>
void selectionSort(ListNode<T>* head) {
if (!head || !head->next) return; // 空链表或只有一个节点,无需排序
auto p = head->next;
while (p) {
auto minNode = p; // 记录最小值节点
auto q = p->next;
while (q) {
if (q->val < minNode->val) minNode = q;
q = q->next;
}
if (minNode != p) std::swap(minNode->val, p->val); // 若最小值不是当前节点,交换值
p = p->next;
}
}
```
其中,`ListNode` 是一个带有 `val` 和 `next` 成员变量的结构体,表示链表节点的值和指向下一个节点的指针。函数的实现过程为:从链表头开始遍历每个节点,找到后续节点中的最小值节点,并将其与当前节点交换值。这样,每次遍历时,当前节点之前的节点已经有序。遍历结束时,整个链表就有序了。
阅读全文