单链表冒泡排序

今天做链表排序有个误区,就是以为交换的时候要连next节点也交换,还要固定head节点,想了很久也没做出来,但是后来看网上的提示,才知道只要交换节点内的数据就可以了,根本不用交换next节点

 

 

#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_list(struct node *phead)

{

	struct node *ptr=phead;

	

	while(ptr != NULL)

	{

		printf("%d ",ptr->data);

		ptr=ptr->next;

	}

	

	printf("\n");

}



struct node *bubble(struct node *phead,int len)

{

	struct node *ptr,*next;

	int temp;

	

	for(int i=0;i<len;i++)

	{

		ptr=phead;

		next=ptr->next;

		for(int j=len-i-1;j>0;j--)

		{

			if(ptr->data > next->data)

			{

				temp=ptr->data;

				ptr->data=next->data;

				next->data=temp;

			}

			ptr=ptr->next;

			next=next->next;

		}

	}

	

	return phead;

}



int main()

{

	int a[10]={

		5,3,6,8,9,6,5,4,2,7

	};

	

	struct node *phead;

	phead=create_list(a,10);	



	print_list(phead);

	

	phead=bubble(phead,10);

	

	print_list(phead);

}

 

你可能感兴趣的:(冒泡排序)