设计一个用链表表示的直接选择排序算法,并用程序实现。
时间: 2023-04-26 15:00:22 浏览: 150
链表排序实现
直接选择排序算法的链表实现:
1. 定义一个链表节点结构体,包含一个数据域和一个指向下一个节点的指针域。
2. 定义一个链表类,包含一个头指针和一个尾指针。
3. 实现链表的插入操作,将数据插入到链表的末尾。
4. 实现链表的遍历操作,将链表中的数据输出。
5. 实现直接选择排序算法,遍历链表,找到最小的元素,将其与链表头部交换,然后继续遍历链表,找到次小的元素,将其与链表的第二个元素交换,以此类推,直到整个链表有序。
6. 在主函数中创建一个链表对象,向其中插入若干个数据,然后调用直接选择排序算法对链表进行排序,最后输出排序后的链表。
链表直接选择排序算法的代码实现:
```
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 定义链表类
class LinkedList {
public:
LinkedList() {
head = NULL;
tail = NULL;
}
// 插入数据到链表末尾
void insert(int val) {
ListNode* node = new ListNode(val);
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
// 遍历链表,输出链表中的数据
void traverse() {
ListNode* node = head;
while (node != NULL) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
// 直接选择排序算法
void selectionSort() {
ListNode* p = head;
while (p != NULL) {
ListNode* q = p->next;
ListNode* minNode = p;
while (q != NULL) {
if (q->val < minNode->val) {
minNode = q;
}
q = q->next;
}
swap(p->val, minNode->val);
p = p->next;
}
}
private:
ListNode* head;
ListNode* tail;
};
int main() {
LinkedList list;
list.insert(3);
list.insert(1);
list.insert(4);
list.insert(2);
list.insert(5);
cout << "排序前:";
list.traverse();
list.selectionSort();
cout << "排序后:";
list.traverse();
return ;
}
```
阅读全文