链表排序,链表冒泡排序(算法非原创)
来源:互联网 发布:小程序 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();
}
- 链表排序,链表冒泡排序(算法非原创)
- 链表实现冒泡排序算法
- 【算法题】链表冒泡排序
- 链表冒泡排序
- 链表冒泡排序
- 链表的一种排序---冒泡排序
- 优化冒泡排序 & 链表选择排序
- 链表排序之冒泡排序
- 经典算法学习——非循环双向链表实现冒泡排序(不带头结点)
- 经典算法学习——非循环双向链表实现冒泡排序(带头结点尾结点)
- 双向链表冒泡排序
- 链表实现冒泡排序
- 链表的冒泡排序
- 链表的冒泡排序
- 链表的冒泡排序
- 链表的冒泡排序
- 链表的冒泡排序
- 链表的冒泡排序
- 10.22
- 如何绑定hosts文件?怎么将IP地址与域名绑定?
- HibernateUtils.java
- 使用PowerDesigner绘制类图
- 2017 Fall SoftwareEngineering Learning (5)
- 链表排序,链表冒泡排序(算法非原创)
- 5 [BX]和loop指令
- bzoj1047理想的正方形
- 动态规划——矩阵连乘
- 44. Wildcard Matching(通配符匹配)
- PyQt5学习教程7:在窗体中增加菜单栏和工具栏
- Java工程师如何让技术越来越精湛
- 从零基础认识Ioc
- Linux 安装分区设置