链表的选择排序
//使用的是选择排序void sort(struct Student *head){
struct Student *p_one,*p_one0,*p_two,*p_two0,*end,*min,*temp=NULL;
//因为要交换元素所以定义p_one0,p_two0表示前面的那个节点
p_one=head;
while(p_one!=NULL){ end=p_one; p_one=p_one->next; }//找出链表的最后一个节点的位置
// 9 1 2 8 3 4 5 6
for(p_one0=head,p_one=head;p_one!=end;p_one0=p_one,p_one=p_one->next){
min=p_one;
for(p_two0=p_one,p_two=p_one->next;p_two!=NULL;p_two0=p_two,p_two=p_two->next){
if(min->num > p_two->num) min=p_two;
}
if(min!=p_one){
if(head==p_one)//如果为第一个节点
head=min;
else//不是第一个
p_one0->next=min;
temp=min->next;
if(p_one->next == min){//如果交换的是相邻的节点
min->next=p_one;
}else{//不是相邻的节点
min->next=p_one->next;
p_two0->next=p_one;
}
p_one->next=temp;
//交换地址 让指针归位 为了可以按照原有顺序遍历链表
temp=p_one;
p_one=min;
min=temp;
}
}
}
这是链表的选择排序,但是不知道错在哪里了,
我检查了好九,求求帮帮忙吧