| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 358 人关注过本帖
标题:有关结构体排序的问题
只看楼主 加入收藏
ch307458491
Rank: 1
等 级:新手上路
帖 子:27
专家分:2
注 册:2012-10-4
结帖率:75%
收藏
 问题点数:0 回复次数:4 
有关结构体排序的问题
我定义了一个 结构体 数组   里面有50名学生的  学号  姓名 成绩  然后如果我按照学生的成绩 进行降序排序  那么我应该怎么做的   是不是应该 用成绩来进行冒泡排序  然后在交换的时候交换三次 把 学号和姓名也交换呢
搜索更多相关主题的帖子: 姓名 结构体 
2012-11-17 15:00
未名湖的云
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:130
专家分:190
注 册:2012-10-11
收藏
得分:0 
我是这样想的,通过一个指针数组,里面保存着每一个结构体数组的首地址,排序的时候交换一下指向
2012-11-17 23:04
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
楼主的方法也可以,不过可以参考下这个:
程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char name[10];
    int  id;
    int  score;
} Student;

int cmp(const void* p1, const void* p2)
{
    return ((Student*)p2)->score - ((Student*)p1)->score;
}

void print_students(Student* students, int size)
{
    int i;
    for (i = 0; i < size; ++i)
        printf("%s %d %d\n", students[i].name, students[i].id, students[i].score);
    putchar('\n');
}

int main(void)
{
    Student students[] = {
        "小明", 1, 60,
        "小红", 2, 61,
        "小白", 3, 62,
        "小东", 4, 59,
        "小西", 5, 90,
        "小南", 6, 11,
        "小北", 7, 12,
    };
    print_students(students, sizeof students / sizeof *students);
    qsort(students, sizeof students / sizeof *students, sizeof *students, cmp);
    print_students(students, sizeof students / sizeof *students);
    return 0;
}

My life is brilliant
2012-11-17 23:24
yangyeat2011
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-12-4
收藏
得分:0 
#include<stdio.h>
#include"string.h"
struct student
{
int num;
char name[20];
float score;
};
void main()
{
struct student stu[50]={{1,"yangye",89},{2,"wanglin",91},{3,"shunzi"},{4,"zhangpeng",80},{5,"liuhu",99}}; /*这里为了省力,仅列举了5个名额*/
struct student *p,*q;
void change(struct student *, struct student *);
for(p=stu;p<stu+49;p++)
for(q=p+1;q<stu+50;q++)
if(p->score<q->score)
change(p,q);
printf("%s\n%s\n%s\n%s\n%s\n",stu[0].name,stu[1].name,stu[2].name,stu[3].name,stu[4].name);
}
void change(struct student *p, struct student *q)
{
int a;
char b[20];
float c;
a=p->num;
strcpy(b,p->name);
c=p->score;
p->num=q->num;
strcpy(p->name,q->name);
p->score=q->score;
q->num=a;
strcpy(q->name,b);
q->score=c;
}
2012-12-04 18:47
lxsjzbd
Rank: 4
来 自:河北省
等 级:业余侠客
帖 子:97
专家分:258
注 册:2012-3-31
收藏
得分:0 
在结构体里加个结构体指针,建立链表
2012-12-04 21:34
快速回复:有关结构体排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035053 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved