利用静态查找表简单选择排序。

输入:输入包括多行,每行代表一定的含义

输入1,创建静态查找表,接着输入n表示查表中元素个数,再输入n个学生记录(学号、姓名、姓名)

输入6 1,代表使用简单选择排序,按照学号升序排序;

输入6 -1,代表使用简单选择排序,按照学号降序排序;

输入0,程序结束。

输出

按照输入的顺序依次输出相关信息

样例输入 

1
3
101 22 alice
105 20 eric
102 18 david
6 1
0

样例输出 

101 22 alice
102 18 david
105 20 eric
#include <stdio.h>
 
#define MAXSIZE 20                //记录最大个数
 
//学生结构体
typedef struct{
       char name[10];
       int age;
       int no;
}Student;
typedef struct{
       Student data[MAXSIZE+1];//data[0]可闲置或作监视哨
       int length;                          //顺序表长度
}SqList;
 
//创建顺序表
void CreateSqList(SqList &L, int n){
       L.length = n;
	   int i;
       for(i=1; i<=L.length; i++){
              scanf("%d %d %s",&L.data[i].no,&L.data[i].age,L.data[i].name);
              getchar();
       }
}
 
//输出顺序表
void PrintSqList(SqList &L){
	int i;
    for(i=1; i<=L.length; i++)
       printf("%d %d %s\n",L.data[i].no,L.data[i].age,L.data[i].name);
}
 
//按照学号简单选择排序,Acc=1表示升序,Acc=-1表示降序
void SelectSort(SqList &L,int Acc)
{
     //--------补充代码--Start------
	int i,j,min;
	if(Acc == 1)
	{
		for(i=1; i<L.length; i++)
		{
			min=i;							
			for(j=i+1; j<=L.length; j++)	
			{		
				if(L.data[j].no<L.data[min].no)
					min=j;			
			}
			if(min!=i)				
			{
				L.data[0]=L.data[i]; 
				L.data[i]=L.data[min];
				L.data[min]=L.data[0];
			}
		}
	}
	else
	{
		for(i=1; i<L.length; i++)		
		{
			min=i;						
			for(j=i+1; j<=L.length; j++)	
			{		
				if(L.data[j].no>L.data[min].no)
					min=j;			
			}
			if(min!=i)				
			{
				L.data[0]=L.data[i]; 
				L.data[i]=L.data[min];
				L.data[min]=L.data[0];
			}
		}
	}
       //--------补充代码--End------
}
 
//主函数
int main(){
       int n,Acc,SortType;
       SqList List,TempList;
       int select;
       while(scanf("%d",&select)!=EOF){
              if(select==0)
                     return 0;
              else if(select==1){
                     scanf("%d",&n);
                     CreateSqList(List, n);
              }            
              if(select==6){       
                     TempList=List;
                     scanf("%d",&Acc);
                     SelectSort(TempList,Acc);
                     PrintSqList(TempList);
              }
       }
       return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值