1.插入排序
链表的创建等系列操作代码详见单链表实现
void Insert_Sort(LinkList &L) {
// 插入排序,变更结点连接
Node *p = L->next, *head; // p指针指向每次要插入的结点,head指针用于找到插入的位置
Node *temp = p->next; // temp指针 指向 p指针后继结点,避免断链
p->next = NULL; // 构造一个结点的有序表
p = temp;
while( p!= NULL ) {
temp = p->next; // 保存 p指针后继结点
head = L;
while ( head->next != NULL && p->data > head->next->data)
head = head->next; // 有序表中查找插入的位置
p->next = head->next;
head->next = p;
p = temp;
}
}
2.选择排序
void Select_Sort1(LinkList &L){
// 选择排序,变更结点连接
Node *head = L, *p = head->next;
head->next = NULL;
for ( ; p!=NULL; ) {
Node *minn = p, *min_pre; // *minn指向最小值结点, *min_pre指向*minn前一个,便于删除操作
for ( Node *q = p; q->next!=NULL; q = q->next) {
if ( minn->data > q->next->data ) {
minn = q->next;
min_pre = q;
}
}
if( minn!=p) min_pre->next = minn->next; // 在当前链表中删除minn结点
else p = p->next; //只有当minn==