加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

直接插入排序,快速排序,选择排序给学生成绩排名

发布时间:2020-12-14 22:55:08 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #includestdio.h#includemalloc.h#includestring.htypedef struct{char name[20];int score;}ElemType;typedef struct{ElemType *elem;int length;}Sq

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#include<stdio.h>
#include<malloc.h>
#include<string.h>

typedef struct{
	char name[20];
	int score;
}ElemType;

typedef struct{
	ElemType *elem;
	int length;
}SqList;

void menu();

void SlectSort(SqList L);
void InsertSort(SqList ST);
int partition(SqList &L,int low,int high);
void Qsort(SqList &L,int high);

int main()
{
	printf("n******学生成绩排序******");
	printf("nn**************************n");
	printf("  1  -------  输入学生数n");
	printf("  2  -------  输入学生姓名及成绩n");
	printf("  3  -------  用直接插入排序输出名次n");
	printf("  4  -------  用快速排序输出名次n");
	printf("  5  -------  用选择排序输出名次n");
    printf("  6  -------  退出n");
	printf("  请选择1-6n");
	printf("**************************n");
	menu();
	return 0;

}
void menu()
{
	SqList ST;
	int key,n,i,done=1;
	while (done) 
	{
		printf("请输入数字 : ");
		scanf("%d",&key);
		switch(key)
		{
		case 1:
			printf("请输入学生数:(n>=10)");
			scanf("%d",&n);
			break;
        case 2:
			ST.length=n;
			ST.elem=(ElemType*)malloc((n+1)*sizeof(ElemType));
			for(i=1;i<=n;i++)
			{
				printf("请输入第%d个学生的基本信息:(姓名 成绩)n",i);
				scanf("%s%d",ST.elem[i].name,&ST.elem[i].score);
			}
			break;
		case 3:
                 //直接插入排序
			InsertSort(ST);
			break;
                case 4:
                 //快速排序
			Qsort(ST,1,ST.length);
			for(i=1;i<=ST.length;i++)
				printf("第%d名:%s  %dn",ST.elem[i].score);
			break;
		case 5:
                 //选择排序
			SlectSort(ST);
			break;
		case 6:
			done=0;
			break;
        default: printf(" ERRORn");     
		}
		printf("n");
	}
}
void InsertSort(SqList ST)
{
	int i,j;
	for(i=2;i<=ST.length;++i)
		if(ST.elem[i].score>ST.elem[i-1].score)
		{
			ST.elem[0]=ST.elem[i];
			ST.elem[i]=ST.elem[i-1];
			for(j=i-2;ST.elem[0].score>ST.elem[j].score;--j)
				ST.elem[j+1]=ST.elem[j];
			ST.elem[j+1]=ST.elem[0];
		}
	for(i=1;i<=ST.length;i++)
		printf("第%d名:%s  %dn",ST.elem[i].score);
}
int partition(SqList &L,int high)
{
	int pivotkey;
	pivotkey=L.elem[low].score;
	L.elem[0]=L.elem[low];
	while(low<high)
	{
		while(low<high&&L.elem[high].score<=pivotkey)
			--high;
		L.elem[low]=L.elem[high];
		while(low<high&&L.elem[low].score>=pivotkey)
			++low;
		L.elem[high]=L.elem[low];
	}
	L.elem[low]=L.elem[0];
	return low;
}
void Qsort(SqList &L,int high)
{
	int pivotloc;
	if(low<high)
	{
		pivotloc=partition(L,low,high);
		Qsort(L,pivotloc-1);
		Qsort(L,pivotloc+1,high);
	}
}
void SlectSort(SqList L)
{
	int i,j,k;
	ElemType temp;
	for(i=1;i<L.length;i++)
	{
		k=i;
		for(j=i+1;j<=L.length;j++)
			if(L.elem[j].score>L.elem[k].score)
				k=j;
		if(i!=k)
		{
			temp=L.elem[k];
            L.elem[k]=L.elem[i];
			L.elem[i]=temp;
		}
	}
	for(i=1;i<=L.length;i++)
		printf("第%d名:%s  %dn",L.elem[i].name,L.elem[i].score);
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读