您的位置:首页 > 编程语言 > C语言/C++

C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序

2016-06-21 22:33 721 查看
//插入排序

stu *view_sort_math(stu *head)  

{  

    struct student *first;

    struct student *t;  

    struct student *p;   

    struct student *q;   

    first = head->next;   

    head->next = NULL;

    while (first != NULL)   

    {  

        for (t = first, q = head; ((q != NULL) && (q->chinese > t->chinese)); p = q, q = q->next);   

        first = first->next;

        if (q == head)   

        {  

            head = t;  

        }  

        else

        {  

            p->next = t;  

        }  

        t->next = q;

    }  

    return head;  

}

//冒泡排序

stu *view_sort_chinese(stu *h)         

{

    stu *endpt,*u,*v,*p;     

    u = (stu *)malloc(sizeof(stu));   

    u->next=h;   

    h=u;   

    for(endpt=NULL;endpt!=h;endpt=p)

    {

        for(p=u=h;u->next->next!=endpt;u=u->next)  

        {

            if(u->next->chinese < u->next->next->chinese)

            {                            

                v=u->next->next;   

                u->next->next=v->next;   

                v->next=u->next;   

                u->next=v;   

                p=u->next->next;   

            }

        }

    }

    u=h;   

    h=h->next;       

    return h;

}

//选择排序

stu *view_sort_c(stu *shead)

{  

    struct student *pfirst;       

    struct student *ptail;         

    struct student *pminBefore;  

    struct student *pmin;         

    struct student *p;             

    pfirst = NULL;  

    while (shead != NULL)       
b3eb
 

    {      

        for (p = shead, pmin = shead; p->next != NULL; p = p->next)

        {  

            if (p->next->math > pmin->math)

            {  

                pminBefore = p;           

                pmin       = p->next;      

            }  

        }     

        if (pfirst == NULL)     

        {  

            pfirst = pmin;      

            ptail  = pmin;      

        }  

        else                    

        {  

            ptail->next = pmin;

            ptail = pmin;       

        }  

        if (pmin == shead)        

        {  

            shead = shead->next;   

        }  

        else   

        {  

            pminBefore->next = pmin->next;   

        }  

    }  

    if (pfirst != NULL)       

    {  

        ptail->next = NULL;

    }  

    shead = pfirst;  

    print_stu_list(shead);

    return shead;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 算法