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;
}

代码解释

  1. 数据结构定义:
    • Student 结构体用于存储单个学生信息,包括学号(sno)、姓名(name)、性别(sex)和年龄(age)。
    • Table 结构体用于存储所有学生信息,包含一个 Student 结构体数组 stu 和一个整型变量 num 表示学生数量。
  2. 输入数据:
    • 程序首先读取学生数量 n
    • 接着读取 n 个学生信息,并存储在 Table 结构体的 stu 数组中。
    • 最后,程序读取一个新的学生信息,存储在 new_stu 结构体中。
  3. 插入排序:
    • 程序遍历已有的学生信息,找到新学生信息应该插入的位置 index
    • 如果 index 为 -1,则新学生信息应该插入到表尾。
    • 否则,将 index 之后的学生信息向后移动一位,然后将新学生信息插入到 index 位置。
  4. 排序输出:
    • 程序对 Table 结构体中的 stu 数组进行排序,确保学生信息按照学号升序排列。
    • 最后,程序打印排序后的学生信息。

总结

本程序展示了如何在C语言中使用插入排序算法对学生信息进行排序,并插入新学生信息。该算法简单易懂,适合处理规模较小的数据集合。

C语言学生信息排序插入算法实现

原文地址: https://www.cveoy.top/t/topic/ojLM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录