算法思想:冒泡排序的核心思想为 内存循环每次冒泡出一个最大的数到尾端
void BubbleSort(LNode *&head){
if(head->next==NULL||head->next->next==NULL) //若链表为空或者链表中只有一个元素 返回
return ;
int flag=0;
LNode *cur; //游标节点
LNode *pre; //游标节点的前驱节点 用户交互时进行链接
LNode *tail=NULL; //尾指针节点
LNode *temp; //临时节点
/**
while(pre->next!=NULL){ //首先找到最后一个节点 并将 tail指向最后一个节点作为 外层循环退出条件
pre=pre->next;
}
pre=p;
*/
while(head->next!=tail){ //当头节点的下一个 节点为尾节点是跳出循环因为当前链表为排序的元素只剩下一个时候无需排序
cur=head->next;
pre=head;
while(cur->next != tail ){
if(cur->data > cur->next->data){
temp=cur->next; //首先将临时指针指向需要交换位置的节点防止断链
cur->next=temp->next; //节点位置交换
temp->next=cur; //节点位置交换
pre->next=temp; //节点位置交换
pre=temp;
flag=1; //调整前驱节点的位置 使pre为cur的前驱节点
}else{
pre=pre->next;
cur=cur->next;
}
}
if(flag==0) //设置一个flag 来检测 当前 链表是否有序 提高效率
return;
tail=cur; //使尾节点 使尾节点 指向每一次冒泡出来的最大节点;尾节点的前面的节点是无序的
}
}