冒泡排序~鏈表

#include

typedef struct node
{
    int data;
    struct node *next;
} linknode,*link;

link creatLink(link head)          //創建鏈表
{
    link p,r;
    int x;
    r=head;
    scanf("%d",&x);
    while(x!=-1)
    {
        p=(link)malloc(sizeof(linknode));
        p->data=x;
        r->next=p;
        r=p;
        scanf("%d",&x);
    }
    r->next=NULL;
    return head;
}

void printLink(link head)            //打印鏈表
{
    link p;
    p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

link bubSort(link head)            //冒泡排序         
{
    link p,x,y,max=NULL;
    while(max!=head->next->next)
   {
       for(p=head;p->next->next != max;p=p->next)
    {
       if(p->next->data > p->next->next->data)
       {
           x=p->next;
           y=p->next->next;
           p->next=y;
           x->next=y->next;
           y->next=x;                    //指針換向
       }
    }
    /*
       * max始終指向此趟排序所確定的最大值
       * max在每趟排序結束後都向前移動一個結點,直到和頭結點相差一個節點後停止排序。
       * 比較的次數總是鏈表個數-1。
       * 利用max指針排序則不需要知道鏈表元素的個數,並且每趟排序的次數越來越少。
    */
    max=p->next;
   }
   return head;

}

int main()
{
    link head;
    link creatLink(link head);      //創建鏈表
    void printLink(link head);      //打印鏈表
    link bubSort(link head);        //冒泡排序
    
    head=(link)malloc(sizeof(linknode));   //創建頭結點
    head->next=NULL;
    
    head=creatLink(head);
    printLink(head);
    head=bubSort(head);

    printLink(head);

    return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章