【数据结构】(单链表)单链表选择排序

算法思想: 每次选择最大的或者最小的 进行尾插或者头插。本例选择每次找到最小的数进行尾插

 void SelectSort(LNode *&head){

  	if(head->next==NULL||head->next->next==NULL)  //若链表为空或者链表中只有一个元素 返回
		return ;

	LNode *s=(LinkList)malloc(sizeof(LNode)); //重新分配一个头节点
	LNode *cur;  //内层循环游标节点
	LNode *min;	 // 存储最小值的节点
	LNode *pre;	 //游标节点的前驱节点
	s->next=head>next;
	head->next=NULL;
	LNode *r=head; //尾节点
	while(s->next){ //如果当前“被选择的”链表还存在元素
		pre=s;  //最小值节点的前驱节点 避免断链
		cur=s->next; //游标节点
		min=cur;  //默认最小值节点为第一个节点

		while(cur->next){
			if(cur->next->data<min->data){
				pre=cur;
				min=cur->next;
			}

			cur=cur->next;
		}
		pre->next=min->next; //解链
		min->next=r->next;  //尾插新的最小节点
		r->next=min;
		r=min;
	}
	r->next=NULL;	//尾节点指空
  }
上一篇:【数据结构】(单链表)单链表插入排序


下一篇:数据结构—删除递增有序链表中值大于mink且小于maxk的所有元素