采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
来源:互联网 发布:淘宝如何设置货到付款 编辑:程序博客网 时间:2024/06/05 03:25
/*结构体定义*/
struct stu
{
int StuID;//
char name[10];//
int sex;//
int years;//
struct stu *next;
};
/***************************************************************
* Function Name: SortList(struct stu *pHead)
* Purpose: 对链表按学号进行排序
* Inputs:
1.pHead, 链表头指针
* Outputs:
NULL
* Retrun Value: 返回int类型值
****************************************************************/
int SortList(struct stu *pHead)
{
/*指针变量定义*/
struct stu *pi = NULL;
struct stu *pj = NULL;
struct stu *psmall = NULL;
struct stu *pafter = NULL;
struct stu *piAfter = NULL;
struct stu *pjAfter = NULL;
struct stu *ptemp = NULL;
struct stu *psmallAfter = NULL;
piAfter = pHead;//目的是记住pi的上一个元素
/*选择排序法*/
for(pi = pHead->next; pi->next != NULL; pi = pi->next)
{
psmall = pi;
for(pj = pi->next ; pj != NULL; psmallAfter = pj, pj = pj->next)//注意for循环的写法
{
if(pj->StuID < psmall->StuID)
{
psmall = pj;
pjAfter = psmallAfter;/*记住psmall的上一个元素*/
}
}
/*以下这种情况是当psmall指向的元素是链表最后一个元素时所进行的交换*/
if(psmall->next == NULL)//这时pi肯定不等于psmall,因为pi到不了链表尾,最多是链表尾的前一个节点处
{
piAfter->next = psmall;
psmall->next = pi->next;
pjAfter->next = pi;
pi->next = NULL;
}
else
if(psmall != pi)
{
piAfter->next = psmall;
pjAfter->next = pi;
ptemp = psmall->next;//暂存
psmall->next = pi->next;
pi->next = ptemp;
}
/* 由于前面的地址交换,使得pi的值改变,这时回到第一层循环前应该将其还原到原来位置的下一个位置,
* 由于有for语句的pi = pi->next,所以这里需要将pi还原为原来的位置
*/
pi = piAfter->next;
piAfter = piAfter->next;/*记住pi的上一个元素*/
}
return 0;
}
- 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
- 对ArrayList中某一元素进行排序
- 对一个数组,按照给定的下标进行排序,仅使用两两交换的方式
- 链表的冒泡排序(节点交换法)
- 使用交换排序法,利用指针和数组对学生成绩进行升序排序
- 对链表中的某一项数据进行排序
- 单链表进行排序-通过节点交换,不通过值交换
- 链表的快速排序(递归,交换节点数据)
- 24.交换每对节点
- web开发中如何对json对象的某一属性对其进行排序
- 对ArrayList中的元素按照某一列进行排序
- 对ArrayList中的元素按照某一列进行排序
- C++对结构体按照某一项元素进行排序
- 对指针交换的讨论
- 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
- Leetcode Swap Nodes in Pairs 交换链表的节点对
- 使用qsort对二维数组李的某一列元素进行排序
- 链表排序交换节点为什么还得单独交换next指针?
- cookie session(http://leeqianjun.javaeye.com/blog/472293)
- SSH Secure Shell-Secure Shell Client操作使用说明
- c#实现的一些几何算法(一)
- 在MFC程序中显示 JPG/GIF图像
- 写给新入IT的新人们(转 感觉自己有很多的毛病)
- 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
- JS字符串全替换方法
- (转)vc串口编程与曲线绘制
- 判断两个链表是否相交
- 游戏中的跨场景寻路
- C++对象模型
- 乌合之众(大众心理研究)之一:民主直通独裁的心理机制
- 浅谈人性 - 讲讲人性丑恶的一面
- 走火入魔权限管理系统、对多系统的集中权限管理配置实现参考