#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 20
int n;
typedef struct //学生结构体的定义
{
int num;//学号
char name[10];//姓名
char cla[20];//班级
int age;//年龄
}Student;
typedef struct SqList//顺序表结构体的定义
{
Student Stu[MAXSIZE+1];//定义一个存放学生信息的数组
}SqList;
void CreatInfo(SqList &L)
{
cout<<"请输入你要创建的学生数:"<<endl;
cin>>n;
cout<<"学生的信息:"<<endl;
cout<<"姓名 学号 年龄 班级:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>L.Stu[i].name>>L.Stu[i].num>>L.Stu[i].age>>L.Stu[i].cla;
}
}
void print(SqList &L)//输出顺序表
{
cout<<"输出学生信息:"<<endl;
for(int i=1;i<=n;++i)
{
cout<<L.Stu[i].name<<" "<<L.Stu[i].num<<" "<<L.Stu[i].age<<" "<<L.Stu[i].cla<<endl;
}
}
void Insertsort(SqList &L)//直接插入排序(班级优先)
{
int i,j;
for(i=2;i<=n;++i)
if(strcmp(L.Stu[i].cla,L.Stu[i-1].cla)<0)
{
L.Stu[0]=L.Stu[i];
for(j=i-1;strcmp(L.Stu[0].cla,L.Stu[j].cla)<0;--j)
L.Stu[j+1]=L.Stu[j];
L.Stu[j+1]=L.Stu[0];
}
}
int Partition(SqList &L,int i,int j)//快速排序
{
Student p;
L.Stu[0]=L.Stu[i];
p=L.Stu[i];
while(i<j)
{
while(i<j &&L.Stu[j].num>=p.num)
j--;
L.Stu[i]=L.Stu[j];
while(i<j &&L.Stu[i].num<=p.num)
i++;
L.Stu[j]=L.Stu[i];
}
L.Stu[i]=p;
return i;
}
void Quicksort(SqList L,int low,int high)//快速排序
{
int location;
if(low<high)
{
location=Partition(L,low,high);
Quicksort(L,low,location-1); //对左区间递归排序
Quicksort(L,location+1,high); //对右区间递归排序
}
}
void Selectsort(SqList &L)//选择排序(姓名优先)
{
Student t;
int i,j,k;
for(i=1;i<=n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(strcmp(L.Stu[j].name,L.Stu[k].name)<0)
k=j;
if(k!=i)
{
t=L.Stu[i];
L.Stu[i]=L.Stu[k];
L.Stu[k]=t;
}
}
}
void find(SqList &L,int n)//查找学生信息
{
int t,m=1;
cout<<"请输入你要查找的学号:"<<endl;
cin>>t;
cout<<"该学生的信息为:"<<endl;
while(m<=n&&L.Stu[m].num!=t)
m++;
if(L.Stu[m].num==t)
cout<<"学号是:"<<L.Stu[m].num<<"\t姓名:"<<L.Stu[m].name<<"\t班 级:"<<L.Stu[m].cla<<"\t年龄:"<<L.Stu[m].age<<endl;
else
cout<<"没有你要查找的学生!"<<endl;
}
int main()
{
SqList L;
int k;
CreatInfo(L);//创建学生信息
print(L);//按输入顺序打印出顺序表
loop: cout<<"请选择排序方式:"<<endl;
cout<<"1 插入排序(班级优先)"<<endl;
cout<<"2 选择排序(姓名优先)"<<endl;
cout<<"3 快速排序"<<endl;
cout<<"4 按学号查找学生"<<endl;
cout<<"0 退出排序程序"<<endl;
cin>>k;
if(k!=0)
{
switch(k)
{
case 1:Insertsort(L);//进行插入排序
print(L);break; //输出插入排序后的顺序表
case 2:Selectsort(L);//进行选择排序
print(L);break;//输出排序后的顺序表
case 3:Quicksort(L,1,n);//选择快速排序
print(L);break;//输出排序后的顺序表
case 4:find(L,n);break;//查找学生信息
default:cout<<"输入错误!"<<endl;
}
}
cout<<endl;
goto loop;
return 0;
}
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 20
int n;
typedef struct //学生结构体的定义
{
int num;//学号
char name[10];//姓名
char cla[20];//班级
int age;//年龄
}Student;
typedef struct SqList//顺序表结构体的定义
{
Student Stu[MAXSIZE+1];//定义一个存放学生信息的数组
}SqList;
void CreatInfo(SqList &L)
{
cout<<"请输入你要创建的学生数:"<<endl;
cin>>n;
cout<<"学生的信息:"<<endl;
cout<<"姓名 学号 年龄 班级:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>L.Stu[i].name>>L.Stu[i].num>>L.Stu[i].age>>L.Stu[i].cla;
}
}
void print(SqList &L)//输出顺序表
{
cout<<"输出学生信息:"<<endl;
for(int i=1;i<=n;++i)
{
cout<<L.Stu[i].name<<" "<<L.Stu[i].num<<" "<<L.Stu[i].age<<" "<<L.Stu[i].cla<<endl;
}
}
void Insertsort(SqList &L)//直接插入排序(班级优先)
{
int i,j;
for(i=2;i<=n;++i)
if(strcmp(L.Stu[i].cla,L.Stu[i-1].cla)<0)
{
L.Stu[0]=L.Stu[i];
for(j=i-1;strcmp(L.Stu[0].cla,L.Stu[j].cla)<0;--j)
L.Stu[j+1]=L.Stu[j];
L.Stu[j+1]=L.Stu[0];
}
}
int Partition(SqList &L,int i,int j)//快速排序
{
Student p;
L.Stu[0]=L.Stu[i];
p=L.Stu[i];
while(i<j)
{
while(i<j &&L.Stu[j].num>=p.num)
j--;
L.Stu[i]=L.Stu[j];
while(i<j &&L.Stu[i].num<=p.num)
i++;
L.Stu[j]=L.Stu[i];
}
L.Stu[i]=p;
return i;
}
void Quicksort(SqList L,int low,int high)//快速排序
{
int location;
if(low<high)
{
location=Partition(L,low,high);
Quicksort(L,low,location-1); //对左区间递归排序
Quicksort(L,location+1,high); //对右区间递归排序
}
}
void Selectsort(SqList &L)//选择排序(姓名优先)
{
Student t;
int i,j,k;
for(i=1;i<=n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(strcmp(L.Stu[j].name,L.Stu[k].name)<0)
k=j;
if(k!=i)
{
t=L.Stu[i];
L.Stu[i]=L.Stu[k];
L.Stu[k]=t;
}
}
}
void find(SqList &L,int n)//查找学生信息
{
int t,m=1;
cout<<"请输入你要查找的学号:"<<endl;
cin>>t;
cout<<"该学生的信息为:"<<endl;
while(m<=n&&L.Stu[m].num!=t)
m++;
if(L.Stu[m].num==t)
cout<<"学号是:"<<L.Stu[m].num<<"\t姓名:"<<L.Stu[m].name<<"\t班 级:"<<L.Stu[m].cla<<"\t年龄:"<<L.Stu[m].age<<endl;
else
cout<<"没有你要查找的学生!"<<endl;
}
int main()
{
SqList L;
int k;
CreatInfo(L);//创建学生信息
print(L);//按输入顺序打印出顺序表
loop: cout<<"请选择排序方式:"<<endl;
cout<<"1 插入排序(班级优先)"<<endl;
cout<<"2 选择排序(姓名优先)"<<endl;
cout<<"3 快速排序"<<endl;
cout<<"4 按学号查找学生"<<endl;
cout<<"0 退出排序程序"<<endl;
cin>>k;
if(k!=0)
{
switch(k)
{
case 1:Insertsort(L);//进行插入排序
print(L);break; //输出插入排序后的顺序表
case 2:Selectsort(L);//进行选择排序
print(L);break;//输出排序后的顺序表
case 3:Quicksort(L,1,n);//选择快速排序
print(L);break;//输出排序后的顺序表
case 4:find(L,n);break;//查找学生信息
default:cout<<"输入错误!"<<endl;
}
}
cout<<endl;
goto loop;
return 0;
}