一、实验目的
1.掌握常用的排序方法,深刻理解排
序的定义和各种排序方法的特点。
2.通过实验观察不同方法的不同之
处,记录并分析各种排序方法的结果。
二、实验环境
⒈ 硬件:每个学生需配备计算机一
台。操作系统:DOS或Windows;
⒉ 软件:DOS或Windows操作系统
+Turbo C;
三、实验要求
在教科书中,各种内部排序算法的时
间复杂度分析结果只给出了算法执行时间
的阶,或大概执行时间。试通过随机数据
比较各算法的关键字比较次数和关键字移
动次数,以取得直观感受。要求:
1.理解及熟练运用直接插入排序、快
速排序、堆排序和归并排序等内部排序算
法。
2.通过计数统计各算法的关键字比较
次数和关键字移动次数。
3.分析算法的时间复杂度、空间复杂
度及稳定性等各项指标。
四、实验内容
1.在自己的U盘的“姓名+学号”文件
夹中创建“实验16”文件夹,本次实验的所
有程序和数据都要求存储到本文件夹中。
2.给出n个学生的m门考试的成绩
表,每个学生的信息由学号、姓名以及各
科成绩组成。对学生的考试成绩进行有关
统计,并打印统计表。
3.分别应用直接插入排序、快速排
序、堆排序和归并排序算法按总成绩高低
排序,打印出名次表,分数相同的为同一
名次。
4.按名次打印出每个学生的学号、姓
名、总分以及各科成绩。
5. 通过随机的数据比较各算法的关键
字比较次数和关键字移动次数,取得直观
感受并分析算法各项性能指标。(随机数
据要用伪随机数产生程序产生;至少要用5
组不同的输入数据作比较;比较的指标为
有关键字参加的比较次数和关键字的移动
次数(关键字交换计为3次移动))
五、代码如下
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define num_ke 3
#define num_stu 4
typedef struct{
int num;
char name[10];
int score[num_ke];
int totalpoints;
int ranking;
}student;//定义数据类型
void ylx_compute(student s[]){
for(int i=1;i<=num_stu;i++){
for(int j=0;j<num_ke;j++){
s[i].totalpoints+=s[i].score[j];