链表排序,链表冒泡排序(算法非原创)

来源:互联网 发布:小程序 ext.json 编辑:程序博客网 时间:2024/06/03 22:38

//注意:文章算法非原创,是看论坛的,但是没有他的URL,如果后期找到会贴上的

//小白一枚,写博客主要原因就是记录自己学习的过程

//创建单链表通过链表里面的随机值Num来进行排序,通过链表中的ID来确定不是值的兑换排序

//黄色是第一次运行的,随机值NUM,从小到大的ID

//红色是排序过后,NUM排序成功,ID对应着数值

//下面是源码,可以运行;

//如果有不清楚的可以1194529638@qq.com


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct MyStruct
{
int ID;
int Num;
struct MyStruct *next;
}Node;
//打印随机值
void Prin(Node *pHead)
{
while (pHead)
{
printf("%d ", pHead->Num);
pHead = pHead->next;
}


printf("\n");
}
//打印ID
void PrinID(Node *pHead)
{
while (pHead)
{
printf("%d  ", pHead->ID);
pHead = pHead->next;
}
printf("\n");
}
//链表简单添加
Node *Init(Node * pHead)
{
Node *pThis = NULL;
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
{


if (pHead == NULL)
{
pHead = (Node*)malloc(sizeof(Node));
pHead->ID = i + 1;
pHead->Num = rand() % 25 + 10;
pHead->next = NULL;
pThis = pHead;
}
else
{
pThis->next = (Node*)malloc(sizeof(Node));
pThis->next->ID = i + 1;
pThis->next->Num = rand() % 25 + 10;
pThis->next->next = NULL;
pThis = pThis->next;


}


}
return pHead;
}
//冒泡排序
Node *Bubble_Sort(Node *pHead)
{
//这里先定义4个节点变量
//1.pTemp  作为临时变量,主要作用来交换节点
//2.pFront 给链表添加一个头
//3.pNum   主要作用判断父主循环是否结束
//4.pIF   主要作用是判断子循环是否结束
Node *pTemp, *pFront, *pNum, *pIF;


//这里我们新开辟一个节点pFront,做为链表的头
pFront = (Node*)malloc(sizeof(Node));
pFront->next = pHead;
pHead = pFront;


//父循环判断是否已完成排序,完成排序后
//子循环会给pIF赋值pHead,结束整个循环
for (pNum = NULL; pNum != pHead; pNum = pIF)
{


//注意赋值这里
for (pIF = pFront = pHead; pFront->next->next != NULL; pFront = pFront->next)
{
if (pFront->next->Num < pFront->next->next->Num)
{
//条件满足进行节点交换
pTemp = pFront->next->next;
pFront->next->next = pTemp->next;
pTemp->next = pFront->next;
pFront->next = pTemp;
pIF = pFront->next->next;
}
}
}


//返回节点,当然要覆盖之前添加的pFront;
pFront = pHead;
pHead = pHead->next;
return pHead;
}
//释放内存
Node *Free(Node *pHead)
{
Node *pThis = NULL;
while (pHead)
{
pThis = pHead;
pHead = pHead->next;
free(pThis);
}
return pHead;
}
//主函数
int main()
{
Node *pHead = NULL;

pHead = Init(pHead);
////////////////////////////////////////////
Prin(pHead);
PrinID(pHead);
////////////////////////////////////////////
pHead = Bubble_Sort(pHead);
////////////////////////////////////////////
printf("--------------------\n");
Prin(pHead);
PrinID(pHead);
////////////////////////////////////////////
pHead = Free(pHead);
pHead = NULL;
getchar();
}

原创粉丝点击