链表归并排序的库函数
时间: 2023-11-12 13:00:34 浏览: 130
库函数,排序,数据类型与指针,三个PPT
C++ STL中的list容器提供了sort()函数,可以对链表进行排序。但是,由于链表的特殊性质,它不能像数组那样直接进行随机访问,因此在排序时需要使用归并排序算法。
具体实现方法如下:
1. 定义一个merge()函数,用于将两个有序链表合并成一个有序链表。
2. 定义一个mergeSort()函数,用于对链表进行归并排序。在该函数中,先将链表分成两个子链表,然后递归地对子链表进行排序,最后将两个有序子链表合并成一个有序链表。
3. 调用mergeSort()函数对整个链表进行排序。
以下是代码示例:
```c++
#include <iostream>
#include <list>
using namespace std;
// 将两个有序链表合并成一个有序链表
void merge(list<int>& l1, list<int>& l2, list<int>& result) {
auto it1 = l1.begin();
auto it2 = l2.begin();
while (it1 != l1.end() && it2 != l2.end()) {
if (*it1 < *it2) {
result.push_back(*it1);
++it1;
} else {
result.push_back(*it2);
++it2;
}
}
while (it1 != l1.end()) {
result.push_back(*it1);
++it1;
}
while (it2 != l2.end()) {
result.push_back(*it2);
++it2;
}
}
// 对链表进行归并排序
void mergeSort(list<int>& l) {
if (l.size() <= 1) {
return;
}
list<int> l1, l2;
auto it = l.begin();
for (int i = 0; i < l.size() / 2; ++i) {
l1.push_back(*it);
++it;
}
for (; it != l.end(); ++it) {
l2.push_back(*it);
}
mergeSort(l1);
mergeSort(l2);
l.clear();
merge(l1, l2, l);
}
int main() {
list<int> l = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
mergeSort(l);
for (auto x : l) {
cout << x << " ";
}
cout << endl;
return 0;
}
```
阅读全文