Code cài đặt thuật toán sắp xếp nổi bọt dùng con trỏ – Code Bubble Sort use pointer

/*---------------------------------------------------
-Thuat Toan: Bubble Sort (Sap Xep Noi Bot)
-Kieu: Pointer (Dung con tro).
----------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
struct Node
{
	int Value;
	Node *Next;
};
typedef Node *List;
typedef Node *Position;
// Tao DS Rong
void MakeNullList(List L)
{
	L->Next=NULL;
}
//Nhap DS
void InsertList(List L)
{
	Node *newnode=new Node;
	Position P;
	L->Next=newnode;
	P=newnode;
	int Sophantu=2;
	printf("Nhap phan tu thu 1:");
	scanf("%d",&newnode->Value);
	// cac phan tu tiep theo
	while(1)
	{
		Node *newnode=new Node;
		newnode->Next=NULL;
		printf("Phan tu thu %d: ",Sophantu);
		Sophantu+=1;
		scanf("%d",&newnode->Value);
		if(newnode->Value==0)
		{
			free(newnode);
			break;
		}
		P->Next=newnode;
		P=newnode;
	}
}
//In DS
void ShowList(List L)
{
	Position P=L->Next;
	while(P!=NULL)
	{
		printf("|%d|",P->Value);
		P=P->Next;
	}
}
// Vi tri con tro cua phan tu cuoi DS
Position LastList(List L)
{
	Position P=L->Next;
	while(P->Next!=NULL)
	{
		P=P->Next;
	}
	return P;
}
// Vitri con tro truoc vi tri P0 trong DS L
Position TruocP(List L,Position P0)
{
	Position P1=L;
	while(P1->Next!=P0&&P1!=NULL)
	{
		P1=P1->Next;
	}
	return P1;
}
//Doi cho 2 phan tu co vi dia chi con tro la P1,P2 trong DS L
void Swap(List L,Position P1,Position P2)
{
	Node *newnode1=new Node;
	Node *newnode2=new Node;
	newnode1->Value=P1->Value;
	newnode2->Value=P2->Value;
	newnode1->Next=P2->Next;
	TruocP(L,P2)->Next=newnode1;
	newnode2->Next=P1->Next;
	TruocP(L,P1)->Next=newnode2;
	free(P1);
	free(P2);
}
// So Phan tu trong DS
int LengthList(List L)
{
	int len=0;
	Position P=L;
	while(P->Next!=NULL)
	{
		len+=1;
		P=P->Next;
	}
	return len;
}
//Lay dia chi con tro cua phan tu co thu tu "vitri" trong DS
Position ConverntXToP(List L,int vitri)
{
	Position P=L;
	for(int index=1;index<=vitri;index++)
	{
		P=P->Next;
	}
	return P;
}
// Sap xep noi bot
void BubbleSort(List L)
{
	for(int index1=1;index1<LengthList(L);index1++)
	{
		for(int index2=LengthList(L);index2>index1;index2--)
		{
			Position P1=ConverntXToP(L,index2-1);
			Position P2=ConverntXToP(L,index2);
			if(P1->Value>P2->Value)
			{
				Swap(L,P1,P2);
			}
		}
	}
}
void main()
{
	clrscr();
	List L1;
	MakeNullList(L1);
	InsertList(L1);
	ShowList(L1);
	BubbleSort(L1);
	printf("\n");
	ShowList(L1);
	getch();
}

nosomovo

Chia sẻ lên
WEB5k - Thiết kế website giá rẻ chuẩn SEO