冒泡排序(链表实现)

来源:互联网 发布:macbook安装windows 编辑:程序博客网 时间:2024/05/19 00:12
#include<stdio.h> #include<iostream> #include<malloc.h>  typedef struct node{    int data;    struct node *next;    }*BT;   void BLine(BT &T,int a[10],BT &T1);//建立链表  void Arrange(BT &T,BT &T1);//对链表排序    int main(){  int a[10]={4,1,0,3,8,9,6,2,7,5};  struct node *T,*T1;  BLine(T,a,T1);  Arrange(T,T1);   system("pause");  return 0;  } /////////////////////////////////////建立链表  void BLine(BT &T,int a[10],BT &T1){  int i=1;  struct node *head,*tail,*p,*p1;  p=(struct node *)malloc(sizeof(struct node));  p->next=NULL;  p->data=a[0];  T=head=tail=p;  while(i<10){     p=(struct node *)malloc(sizeof(struct node));    p->next=NULL;  p->data=a[i];  tail->next=p;  tail=p;  i++;     }     T1=tail;   p1=head;   while(1){  printf("%d ",p1->data);  if(p1->next==NULL) break;  p1=p1->next;  }  printf("\n");    } ///////////////////////////////////////对链表排序 void Arrange(BT &T,BT &T1){      int n=1;  struct node *head,*tail,*p,*p1,*p2,*p3;      head=*(&T);      tail=*(&T1);      while(1){  p=head;          if(head->data>head->next->data){  head=head->next;  p->next=head->next;  head->next=p;  }  else p=p->next;      p1=head;      p2=tail;      while(1){     if(p->data>p->next->data){     if(p->next==p2){     p1->next=p->next;     p->next=NULL;     tail=p;     p1->next->next=p;     p1=p1->next;     break;     }     else{     p1->next=p->next;     p->next=p1->next->next;     p1->next->next=p;     p1=p1->next;     }     }     else{     p=p->next;     p1=p1->next;     }         if(p==p2)break;  }  n++;  if(n==10) break;  }   p3=head;   while(1){       printf("%d ",p3->data);       if(p3->next==NULL) break;   p3=p3->next;    }  } 

0 0