#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
struct node* create_list(int a[], int len) {
struct node *phead;
struct node *ptr;
struct node *pre;
phead = (struct node *)malloc(sizeof(struct node));
int i = 0;
phead->data = a[i];
phead->next = NULL;
ptr = phead->next;
pre = phead;
for(i = 1; i < len; i++) {
ptr = (struct node *)malloc(sizeof(struct node));
ptr->data = a[i];
ptr->next = NULL;
pre->next = ptr;
ptr = ptr->next;
pre = pre->next;
}
return phead;
}
void print(node *phead){//打印结点
node *p=phead;
while(p!=NULL){
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
void BubbleSort(node **phead){//冒泡排序
if(!phead||!(*phead))
return;
node *cur=*phead;
node dummy;//dummy为头节点
dummy.next=*phead;
node *pre=&dummy;
node *ter=NULL;
while(cur!=ter) {
while(cur->next!=ter){
if(cur->data<cur->next->data){
pre=cur;
cur=cur->next;
}
else{
node *tmp=cur->next;
cur->next=tmp->next;
tmp->next=cur;
pre->next=tmp;
pre=tmp;
}
}
ter=cur;
pre=&dummy;
cur=dummy.next;
}
*phead=dummy.next;
}
int main() {
int a[10] = {9,8,7,6,5,4,3,2,1,0};
struct node *phead;
phead = create_list(a,10);
printf("排序前:");
print(phead);
BubbleSort(&phead);
printf("排序后:");
print(phead);
}
结果为: