1. 程式人生 > >C語言單鏈表的3種排序演算法,插入排序,氣泡排序,選擇排序

C語言單鏈表的3種排序演算法,插入排序,氣泡排序,選擇排序

//插入排序
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)         
    {      
        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;
}