0. 链表实现直接插入排序 —— C++详解
【数据结构】链表实现直接插入排序 —— C++详解
1. 代码实现
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
int GetListLength(LinkList &L) {
int length = 0;
LNode *p = L;
while (p->next) {
++length;
p = p->next;
}
return length;
}
void BubbleSort(LinkList &L) {
int length = GetListLength(L);
for (int i = 1; i <= length - 1; ++i) {
int cnt = 0;
bool flag = false;
LNode *p = L;
while (p->next && cnt != (length - i)) {
if (p->next->data > p->next->next->data) {
flag = true;
LNode *temp = p->next;
p->next = p->next->next;
temp->next = p->next->next;
p->next->next = temp;
}
++cnt;
p = p->next;
}
if (flag == false) {
break;
}
}
}
void PrintList(LinkList &L) {
LNode *p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
}
void InitList(LinkList &L) {
L = new LNode;
LNode *node1 = new LNode;
LNode *node2 = new LNode;
LNode *node3 = new LNode;
LNode *node4 = new LNode;
LNode *node5 = new LNode;
LNode *node6 = new LNode;
LNode *node7 = new LNode;
LNode *node8 = new LNode;
node1->data = 3;
node2->data = 5;
node3->data = 1;
node4->data = 7;
node5->data = 4;
node6->data = 4;
node7->data = 13;
node8->data = 8;
L->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = node6;
node6->next = node7;
node7->next = node8;
node8->next = NULL;
}
int main() {
LinkList L;
InitList(L);
PrintList(L);
BubbleSort(L);
cout << endl;
PrintList(L);
return 0;
}
2. 运行截图