单链表的选择排序
程序代码:
//使用的是选择排序 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; } } } 这是链表的选择排序,错误都要最后几行,但是差不出错误
[ 本帖最后由 陆嘉文 于 2015-8-18 17:13 编辑 ]