C++建立一个单链表,并使用冒泡排序法对各结点的元素值进行从小到大的排序
时间: 2024-10-16 19:13:32 浏览: 36
在C++中,我们可以首先创建一个简单的单链表结构,然后利用冒泡排序算法对其进行排序。以下是步骤概述:
1. **定义单链表节点**:
```cpp
struct ListNode {
int val; // 节点数据
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
```
2. **创建单链表**:
```cpp
ListNode* createList(int arr[], int size) {
ListNode* head = nullptr;
ListNode* tail = nullptr;
for (int i = 0; i < size; ++i) {
ListNode* newNode = new ListNode(arr[i]);
if (!head) {
head = newNode;
} else {
tail->next = newNode;
}
tail = newNode;
}
return head;
}
```
3. **冒泡排序函数**:
```cpp
void bubbleSortList(ListNode* &head) {
if (head == nullptr || head->next == nullptr) {
return; // 如果链表为空或只有一个节点,无需排序
}
ListNode* prev = nullptr;
ListNode* curr = head;
bool swapped;
while (curr != nullptr) {
swapped = false;
for (prev = curr; prev->next != nullptr && !swapped; prev = prev->next) {
if (prev->val > prev->next->val) {
std::swap(prev->val, prev->next->val);
swapped = true;
}
}
if (!swapped) { // 如果一轮没有交换,说明已经有序,可以提前退出
break;
}
curr = curr->next;
}
}
```
4. **完整示例**:
```cpp
int main() {
int arr[] = {5, 3, 8, 2, 9}; // 需要排序的元素
int size = sizeof(arr) / sizeof(arr[0]);
ListNode* listHead = createList(arr, size);
// 对链表头进行排序
bubbleSortList(listHead);
// 打印排序后的链表
printLinkedList(listHead);
// 清理内存
delete listHead;
return 0;
}
```
阅读全文