单项链表冒泡法排序
图片实例
代码部分
head 是原链表头的地址,prehead是为了辅助冒泡法排序前接的节点
STU* sort(STU *head)
{
//count用于记录内层循环的次数
int count = 0,num;
STU *Pt0,*Pt1 = head,*Pt2,*prehead = (STU*)malloc(sizeof(STU));
prehead->next = head;
Pt0 = prehead;
//记录节点个数,用于判断外部循环次数
while(Pt1 != NULL)
{
count++;
Pt1 = Pt1->next;
}
for (int i=0;i<count-1;i++)
{
num = count - i - 1;
Pt0 = prehead;
Pt1 = Pt0->next;
Pt2 = Pt1->next;
while (num--)
{
if (Pt1->score < Pt2->score)
{
Pt1->next = Pt2->next;
Pt2->next = Pt1;
Pt0->next = Pt2;
}
Pt0 = Pt0->next;
Pt1 = Pt0->next;
Pt2 = Pt1->next;
}
}
head = prehead->next;
free(prehead);
return head;
}