C语言学生信息排序插入算法实现
C语言学生信息排序插入算法实现
本程序演示了如何使用C语言实现学生信息插入排序的算法,并展示了如何将一个新学生信息插入到已排序的列表中,同时保持列表的排序状态。
代码实现
#include <stdio.h>
#include <string.h>
typedef struct Student{
int sno;
char name[10];
char sex;
int age;
}Student;
typedef struct Table{
Student stu[1000];
int num;
}Table;
int main(){
Table t;
int n;
scanf('%d', &n);
t.num = n;
for(int i=0; i<n; i++){
scanf('%d %s %c %d', &t.stu[i].sno, t.stu[i].name, &t.stu[i].sex, &t.stu[i].age);
}
Student new_stu;
scanf('%d %s %c %d', &new_stu.sno, new_stu.name, &new_stu.sex, &new_stu.age);
//插入新学生信息
int index = -1; //要插入的位置
for(int i=0; i<t.num; i++){
if(new_stu.sno < t.stu[i].sno){
index = i;
break;
}
}
if(index == -1){ //要插入的位置在表尾
t.stu[t.num] = new_stu;
}
else{ //要插入的位置在中间
for(int i=t.num; i>index; i--){
t.stu[i] = t.stu[i-1];
}
t.stu[index] = new_stu;
}
t.num++; //表中数据个数加1
//按照学号升序排列
for(int i=0; i<t.num-1; i++){
for(int j=0; j<t.num-1-i; j++){
if(t.stu[j].sno > t.stu[j+1].sno){
Student temp = t.stu[j];
t.stu[j] = t.stu[j+1];
t.stu[j+1] = temp;
}
}
}
//打印学生信息
for(int i=0; i<t.num; i++){
printf('%d %s %c %d\n', t.stu[i].sno, t.stu[i].name, t.stu[i].sex, t.stu[i].age);
}
return 0;
}
代码解释
- 数据结构定义:
Student结构体用于存储单个学生信息,包括学号(sno)、姓名(name)、性别(sex)和年龄(age)。Table结构体用于存储所有学生信息,包含一个Student结构体数组stu和一个整型变量num表示学生数量。
- 输入数据:
- 程序首先读取学生数量
n。 - 接着读取
n个学生信息,并存储在Table结构体的stu数组中。 - 最后,程序读取一个新的学生信息,存储在
new_stu结构体中。
- 程序首先读取学生数量
- 插入排序:
- 程序遍历已有的学生信息,找到新学生信息应该插入的位置
index。 - 如果
index为 -1,则新学生信息应该插入到表尾。 - 否则,将
index之后的学生信息向后移动一位,然后将新学生信息插入到index位置。
- 程序遍历已有的学生信息,找到新学生信息应该插入的位置
- 排序输出:
- 程序对
Table结构体中的stu数组进行排序,确保学生信息按照学号升序排列。 - 最后,程序打印排序后的学生信息。
- 程序对
总结
本程序展示了如何在C语言中使用插入排序算法对学生信息进行排序,并插入新学生信息。该算法简单易懂,适合处理规模较小的数据集合。
原文地址: https://www.cveoy.top/t/topic/ojLM 著作权归作者所有。请勿转载和采集!