C语言结构体排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体排序相关的知识,希望对你有一定的参考价值。

任务描述
题目描述:有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输出学生的信息。
输入
输入数据第一行为整数n,表示有n个学生。 1<=n<=200;
接下来包含n行数据,每行数据代表一个学生的信息,按学号,姓名,成绩顺序给出。
学号为一整数,最多11位,姓名为字符串,长度不超过20,成绩为整数。
输出
按成绩由高到低输出n个学生的信息,字段顺序和输入相同。
样例输入
5
10101 Zhang 78
10103 Wang 98
10106 Li 86
10108 Ling 73
10110 Sun 100
样例输出
10110 Sun 100
10103 Wang 98
10106 Li 86
10101 Zhang 78
10108 Ling 73

#include<stdio.h>

struct

long long id;
char name[32];
int s;
t,stus[200];

int main()

int n,i,swap=1,sorted=0;

scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lld %s %d",&stus[i].id,stus[i].name,&stus[i].s);
printf("\n");
while(swap)

swap=0;
for(i=0;i<n-1-sorted;i++)

if(stus[i+1].s>stus[i].s)

swap=1;
t=stus[i];
stus[i]=stus[i+1];
stus[i+1]=t;


sorted++;

for(i=0;i<n;i++)
printf("%lld %s %d\n",stus[i].id,stus[i].name,stus[i].s);
return 0;
追答

追问

请问怎么删除结构体数组中的一个元素

请问怎么删除结构体数组中的一个元素

追答

首先,找到要删除的元素的下标,假设下标为n,

然后,令下标为n+1的元素到数组的最后一个元素依次向前移动一个元素,即覆盖前一个元素

最后,令数组长度减1

很简单的算法。

参考技术A 就是排序问题嘛,跟结构体有啥关系?
比较结构体中的shu成员啊
冒泡排序的核心代码如下:
struct student ss[20],t;
for(i=0;i<20-1;i++)

for(j=20-1;j>i;j--)

if(ss[j].shu < ss[j-1].shu)

t=ss[j];
ss[j]=ss[j-1];
ss[j-1]=t;



补充:
只需要在交换的时候,按整个结构体换,就行了啊
下面交换代码中的t和ss都是结构体啊
struct student ss[20],t;
t=ss[j];
ss[j]=ss[j-1];
ss[j-1]=t;追问

请问怎么删除结构体数组中的一个元素

以上是关于C语言结构体排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言 结构体如何排序

C语言结构体排序

C语言结构体排序

c语言中如何将按结构体中的某个元素大小,将结构体排序输出

c语言函数能不能返回结构体

c语言中返回结构体数组