数据结构 堆排序 降序排序

本文介绍了一种使用堆排序法对学生信息进行编号降序排序的方法,并通过C语言实现。该程序从文本文件中读取学生信息,完成排序后输出排序前后结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已知9名学生的信息,每个学生信息包括编号和姓名。学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳。用堆排序法实现以编号为排序码的降序排序,然后显示有序的学生信息。要求从文本文件中读取学生信息(相邻数据间用空白符分隔,且姓名不含有空白符)。

文本文件编写

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
	int sno;
	char name[10];
}student;
void shaixuan(student s[],int f,int e)
{
	int i,j;
	student rc;
	rc=s[f];
	i=f;
	for(j=2*i;j<=e;j=2*j)
	{
		if(j<e&&s[j].sno>s[j+1].sno)
		j++;
		if(rc.sno<s[j].sno) break;
		s[i]=s[j];i=j;
	}
	s[i]=rc;
}
void duipai(student s[],int n)
{
	int i;
	for(i=n/2;i>0;i--)
	shaixuan(s,i,n);
	for(i=n;i>1;i--)
	{
		s[0]=s[1];s[1]=s[i];s[i]=s[0];
		shaixuan(s,1,i-1);
	}
}
int main()
{
	int i=1;
	char c;
	char filename[80];
	FILE *fp;
	student s[10];
	puts("请输入文本文件地址:");
	gets(filename);
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("文件打开失败!\n");
		return 0;
	}
	while(!feof(fp))
	{
		fscanf(fp,"%d %s ",&s[i].sno,&s[i++].name);
	}
	fclose(fp);

	printf("堆排序前:\n"); 
	for(i=1;i<10;i++)
	{
		printf("%d %s,",s[i].sno,s[i].name);
	}
	duipai(s,9);
	printf("\n堆排序后:\n"); 
	for(i=1;i<10;i++)
	{
		printf("%d %s,",s[i].sno,s[i].name);
	}
	return 0;
} 

输出结果为

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值