⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.cpp

📁 一个学生成绩管理系统
💻 CPP
字号:
#include "headfile.h"
//使用堆排序对各科成绩按从高到低排列
Status Sort(Hash *H)
{
	HeapType a,b,c;
	int i,j,k,m;
	stu t;
	j=k=m=1;
	a.length=b.length=c.length=0;
	//把哈希表中的数据放到堆结构中
	for(i=0;i<MaxLength;i++)
	{
		if(H[i])
		{
			t=H[i];
			while(t)
			{
				a.r[j]=t->s.datastruct;
				b.r[k]=t->s.english;
				c.r[m]=t->s.math;
				j++;
				k++;
				m++;
				a.length++;
				b.length++;
				c.length++;
				t=t->next;
			}
		}
	}
	//中文成绩
	if(a.length>1)
	{
	HeapSort (a);
    
	printf("	数据结构成绩从高到低排列为:\n\n");
	for(i=a.length;i>0;i--)
		printf("%d  ",a.r[i]);
	printf("\n\n");
	Calculate(a);
	printf("\n\n");
	}
	//英文成绩
	if(b.length>1)
	{
	HeapSort (b);
	printf("	英文成绩从高到低排列为:\n\n");
	for(i=b.length;i>0;i--)
		printf("%d  ",b.r[i]);
	printf("\n\n");
	Calculate(b);
	printf("\n\n");
	}
	//数学成绩
	if(c.length>1)
	{
	HeapSort (c);
	printf("	数学成绩从高到低排列为:\n\n");
	for(i=c.length;i>0;i--)
		printf("%d  ",c.r[i]);
	printf("\n\n");
	Calculate(c);
	printf("\n\n");	
	}
	return OK;
}

void HeapAdjust (HeapType &H , int s, int m)
{   // 已知 R[s..m]中记录的关键字除 R[s] 之外均
    // 满足堆的特征,本函数自上而下调整 R[s] 的
    // 关键字,使 R[s..m] 也成为一个大顶堆。
	int rc;
	int j;
rc = H.r[s];    // 暂存 R[s] 
for ( j=2*s; j<=m; j*=2 ) { // j 初值指向左孩子
    //自上而下的筛选过程;
	if ( j<m && LT(H.r[j],H.r[j+1]) )  ++j;     
             // 左/右“子树根”之间先进行相互比较
             // 令 j 指示关键字较大记录的位置
	if ( !LT(rc ,H.r[j]) )  break; 
           // 再作“根”和“子树根”之间的比较,
           // 若“>=”成立,则说明已找到 rc 的插
           // 入位置 s ,不需要继续往下调整
H.r[s] = H.r[j];   s = j;    
        // 否则记录上移,尚需继续往下调整

}
H.r[s] = rc;  // 将调整前的堆顶记录插入到 s 位置
} // HeapAdjust

void HeapSort ( HeapType &H ) {
  // 对顺序表 H 进行堆排序。
int temp;
int i;
for ( i=H.length/2;i>0;--i )
     HeapAdjust ( H, i, H.length );    // 建大顶堆

for ( i=H.length; i>1; --i ) {
     //H.r[1]←→H.r[i];    
	temp=H.r[1];
	H.r[1]=H.r[i];
	H.r[i]=temp;
         // 将堆顶记录当前未经排序子序列
          //  H.r[1..i]中最后一个记录相互交换
     HeapAdjust(H, 1, i-1);  // 对 H.r[1] 进行筛选
}

} // HeapSort
//统计各个分数段的人数
void Calculate(HeapType h)
{
	int a,b,c,d,e;
	int i;
	a=b=c=d=e=0;
	for(i=1;i<=h.length;i++)
	{
	if(h.r[i]>=90)
		a++;
	else if(h.r[i]>=80)
		b++;
	else if(h.r[i]>70)
		c++;
	else if(h.r[i]>60)
		d++;
	else
		e++;
	}
	printf("90分以上的有%d人		",a);
	printf("80-90分的有%d人\n",b);
	printf("70-80分的有%d人		",c);
	printf("60-70分的有%d人\n",d);
	printf("60分以下的有%d人\n",e);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -