#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
class LinkList {
public:
LinkList(int a[], int n);//头插法构造一个带头结点的单链表
int Sort_Insert();// 插入排序函数
void Show();
private:
int k;// 链表中元素的个数
Node *first, *s, *p, *m, *r, *q, *y;
};
LinkList::LinkList(int a[], int n)
{
k = n;
first = new Node;
first->next = NULL;
for (int i = 0; i < n; i++)
{
s = new Node;
s->data = a[i];
s->next = first->next;
first->next = s;
}
p = first->next->next;// 确定几个重要指针的初始位置
y = first->next;
}
int LinkList::Sort_Insert()
{
r = first->next;
m = first;
while (r != p)
{
if (p->data < r->data)
{
q = p->next;// 先将p结点下一个的地址保存下来
y->next = p->next;
p->next = r;
m->next = p;
p = q;// 取回p的地址
if (p == NULL)
return 0;
else
{
Sort_Insert();// 递归调用排序函数
return 0;
}
}
else
{
r = r->next;
m = m->next;
}
}
p = p->next;
y = y->next;
if (p == NULL) {
return 0;
}
else
Sort_Insert();
return 0;
}
void LinkList::Show()
{
Node *t = first->next;
for (int i = 0; i < k; i++)
{
cout << t->data << endl;
t = t->next;
}
}
int main()
{
int list[7] = { 3,7,4,8,5,2,1 };
LinkList linklist(list, 7);
cout << "排序之前的顺序为:" << endl;
linklist.Show();
linklist.Sort_Insert();
cout << "排序之后的顺序为:" << endl;
linklist.Show();
system("pause");
return 0;
}
结果: