用C++实现对链表的冒泡排序,只交换数字
时间: 2024-10-22 20:20:18 浏览: 44
DuLinkBubbleSort 双向链表实现冒泡排序
在C++中,我们可以使用链表数据结构来实现冒泡排序,但是由于链表的特点(没有随机访问),通常不适合直接进行元素间的比较操作。因此,对于链表进行冒泡排序通常是通过遍历节点,比较其存储的数值来进行的。这里是一个简单的例子,展示如何遍历链表并进行冒泡排序:
```cpp
#include <iostream>
using namespace std;
// 链表节点定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
void bubbleSortLinkedList(ListNode* &head) {
if (head == nullptr || head->next == nullptr) {
return; // 如果链表为空或只有一个元素,无需排序
}
ListNode* slow = head, *fast = head->next;
bool swapped;
while (fast != nullptr && fast->next != nullptr) {
swapped = false;
slow = slow->next;
fast = fast->next->next;
// 比较相邻节点的值并交换
if (slow->val > slow->next->val) {
swap(slow->val, slow->next->val);
swapped = true;
}
// 如果一轮没有发生交换,则链表已经有序
if (!swapped)
break;
}
}
int main() {
// 创建示例链表
ListNode* list = new ListNode(5);
list->next = new ListNode(3);
list->next->next = new ListNode(7);
list->next->next->next = new ListNode(2);
list->next->next->next->next = new ListNode(4);
cout << "Before sorting: ";
printList(list); // 打印原始链表
bubbleSortLinkedList(list);
cout << "After sorting: ";
printList(list); // 打印排序后的链表
return 0;
}
// 辅助函数打印链表
void printList(ListNode* head) {
while (head) {
cout << head->val << " -> ";
head = head->next;
}
cout << "NULL" << endl;
}
阅读全文