📄 sort.cpp
字号:
#include "Function.h"
void InfoManager::SortByID()
{
Unit *p1, *p2;
p1=head_stu;
int count=Get_Length();
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->ID>p1->next->ID)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->ID>p1->next->ID)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
void InfoManager::SortBySex (int sign)
{
--sign;
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
if (sign==0)
{
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Sex>p1->next->Sex)//首结点小于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Sex>p1->next->Sex)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
}
else
{
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Sex<p1->next->Sex)//首结点小于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Sex<p1->next->Sex)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
void InfoManager::SortByOld (int sign)
{
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
if (sign==1)
{
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Old>p1->next->Old)//首结点小于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Old>p1->next->Old)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
}
else
{
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Old<p1->next->Old)//首结点小于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Old<p1->next->Old)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
Unit * InfoManager::SortByClass(Unit *p1)
{
Unit *p2=NULL;
Unit *p3=p1;
Unit *p4=p1;
int count=0;
while (p4)
{
++count;
p4=p4->next;
}
for (int i=1; i<count; ++i)
{
p1=p3;
if (p1->Class>p1->next->Class)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
p3=p2;
}
p1=p3;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Class>p1->next->Class)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
return p3;
}
void InfoManager::SortByMath()
{
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Math<p1->next->Math)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Math<p1->next->Math)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
void InfoManager::SortByChinese()
{
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Chinese<p1->next->Chinese)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Chinese<p1->next->Chinese)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
void InfoManager::SortByEnglish()
{
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->English<p1->next->English)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->English<p1->next->English)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
void InfoManager::SortByAverage()
{
Unit *p1, *p2;
int count=Get_Length();
p1=head_stu;
for (int i=1; i<count; ++i)
{
p1=head_stu;
if (p1->Average<p1->next->Average)//首结点大于第二个节点,交换
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head_stu=p2;
}
p1=head_stu;
while (p1->next->next)//交换除首节点以外的节点
{
p2=p1;
p1=p1->next;
if (p1->Average<p1->next->Average)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;
}
}
}
InfoManager::Show_All_Stu(head_stu);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -