c语言结构体排序(C语言中结构体数据排序)

:暂无数据 2026-09-26 04:50:02 :0

c语言结构体排序(C语言中结构体数据排序)

大家好,关于c语言结构体排序很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于C语言中结构体数据排序的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

C语言中结构体数据排序

设结构体名为AAA,结构体数组声明为struct AAA a[N];(N为宏定义常量),身份证成员名为id,则排序函数可如下写——

#include “stdio.h“
#include 《string.h》
#define N 3
struct AAA{
char id;
int age;
};
void mysort(struct AAA *p){//排序函数
struct AAA t;
int i,j,k;
for(i=0;i《N;i++){
for(k=i,j=k+1;j《N;j++)
if(strcmp((p+j)-》id,(p+k)-》id)《0)
k=j;
if(i!=k)
t=*(p+k),*(p+k)=*(p+i),*(p+i)=t;
}
}
int main(int argc,char *argv){//测试主函数
struct AAA a[N]={{“650104194812109907“,77},{“333018201801015555“,1},{“650104194812109903“,80}};
mysort(a);
printf(“%s\t%d\n“,a.id,a.age);
printf(“%s\t%d\n“,a.id,a.age);
printf(“%s\t%d\n“,a.id,a.age);
return 0;
}

运行结果:

C语言 结构体如何排序

由于你只是交换字符串,所以修改如下,请检验。
定义一个字符串数组 char sn;
交换时进行如下修改
strcpy(sn,library.book[k].number);
strcpy(library.book[k].number,library.book[i].number);
strcpy(library.book[i].number,sn);

用strcpy(s1,s2)进行复制字符串,不能直接s1=s2。
#include《stdio.h》
#include 《time.h》
typedef struct
{
char number;//书号
char name;//书名
char author;//作者
char publish;//出版社
char time;//出版时间
float price;//单价
}mbook;
typedef struct
{
int count;//书的本数
mbook book;//最大可有书的数量
}mlibrary;
mlibrary library,t;

main()
{ void sort_by_price(void);
sort_by_price();
}
void sort_by_price(void) /*定义按价格排序函数*/
{
int i,j,k;
char sn;
for(i=0;i《library.count-1;i++)
{
k=i;
for(j=i+1;j《library.count;j++)
if(library.book[j].price《library.book[k].price)
k=j;
if(k!=i)
{
strcpy(sn,library.book[k].number);
strcpy(library.book[k].number,library.book[i].number);
strcpy(library.book[i].number,sn);
}
}
} ;

C语言利用结构体变量构成的单项链表怎么排序

首先定义一个结构体,如:
struct
studentData
{
char
sno;
/*学号*/
char
sname;
/*姓名*/
int
age;
/*年龄*/
int
score;
/*五门成绩*/
};
再定义构成单链表的结点:struct
student
{
/*数据域*/
struct
studentData
info;
struct
student
*next;/*指针域*/
};
下面是选择排序:void
OrderBySnoAsc(){
//以学号按升序排序
struct
student
*p,*q,*min;
struct
studentData
temp;
//交换时用到的临时变量
for(p=head;p
!=
NULL;p=p-》next){
min=p;
for(q=p-》next;q
!=
NULL;q=q-》next)
if(strcmp(min-》info.sno,q-》info.sno)》0)
min=q;
if(min!=p){
temp=min-》info;
min-》info
=p-》info;
p-》info=temp;
}
}
}
以下是冒泡排序:void
OrderBySnoAsc(){
//以学号按升序排序
struct
student
*p,*q;
struct
studentData
temp;
//交换时用到的临时变量

for(p=head;p!=NULL;p=p-》next)
{
for(q=head;q-》next!=NULL;q=q-》next)
{
if(strcmp(q-》info.sno,q-》next-》info.sno)》0)//相邻的两个之间比较
{
temp=q-》info;
q-》info
=q-》next-》info;
q-》next-》info=temp;

}
}
}
}

C语言,如何对结构体的不同成员排序一个结构体类型有5个成员,需要分别按这5个成员的关键字排序

还真是这样,当然,你可以做点手脚,牺牲下空间。比如在结构体里保存一个指向如何排序的引导,在比较函数里面再提取这个信息,判断是哪个字段,做什么比较。一般这种比较函数跟qsort一起用。

typedef struct {
int key;
double value;
} the_record;

int compare_function(const void *a,const void *b) {
the_record *x = (the_record *) a;
the_record *y = (the_record *) b;
return x-》key - y-》key;
}

C语言,结构体快排

自定义一个比较函数,直接调用快排库函数qsort即可。举例如下:

//#include “stdafx.h“//If the vc++6.0, with this line.
#include “stdio.h“
#include “stdlib.h“
#include “time.h“
struct ln{
  int data,score,math;
}ss;
int mycmp(const void *a, const void *b){//自定义比较函数
    return ((struct ln*)a)-》data-((struct ln*)b)-》data;//若要降序,-号前后变量交换
}//data改为score或math就可按相应要素排序
int main(void){//测试一下……
    int i;
    srand((unsigned)time(NULL));
    for(i=0;i《100;ss[i++].data=rand()%1000);
    qsort(ss,100,sizeof(struct ln),mycmp);
    for(i=0;i《100;printf(“%4d“,ss[i++].data));
    printf(“\n“);
    return 0;
}

OK,关于c语言结构体排序和C语言中结构体数据排序的内容到此结束了,希望对大家有所帮助。

c语言结构体排序(C语言中结构体数据排序)

本文编辑:admin

更多文章:


issued retroactively(FORM E上盖“ISSUED RETROACTIVELY”的问题,小女在线等待)

issued retroactively(FORM E上盖“ISSUED RETROACTIVELY”的问题,小女在线等待)

各位老铁们,大家好,今天由我来为大家分享issued retroactively,以及FORM E上盖“ISSUED RETROACTIVELY”的问题,小女在线等待的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站

2026年10月15日 10:30

f发音是什么?printf的返回值是什么

f发音是什么?printf的返回值是什么

大家好,关于f很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于f发音是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月15日 10:10

begin和start的区别(start与begin的区别)

begin和start的区别(start与begin的区别)

其实begin和start的区别的问题并不复杂,但是又很多的朋友都不太了解start与begin的区别,因此呢,今天小编就来为大家分享begin和start的区别的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月15日 09:20

vant官网中文(范特365 是韩国化妆品VANT36.5吗)

vant官网中文(范特365 是韩国化妆品VANT36.5吗)

大家好,今天小编来为大家解答以下的问题,关于vant官网中文,范特365 是韩国化妆品VANT36.5吗这个很多人还不知道,现在让我们一起来看看吧!

2026年10月15日 09:10

特殊字符是指什么?正则表达式中一些特殊字符的用法

特殊字符是指什么?正则表达式中一些特殊字符的用法

大家好,特殊字符相信很多的网友都不是很明白,包括特殊字符是指什么也是一样,不过没有关系,接下来就来为大家分享关于特殊字符和特殊字符是指什么的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年10月15日 08:10

特殊符号网名大全花样符号(特殊符号昵称有哪些)

特殊符号网名大全花样符号(特殊符号昵称有哪些)

本篇文章给大家谈谈特殊符号网名大全花样符号,以及特殊符号昵称有哪些对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月15日 07:30

prison break(越狱(prison break)到底是在讲个什么)

prison break(越狱(prison break)到底是在讲个什么)

各位老铁们好,相信很多人对prison break都不是特别的了解,因此呢,今天就来为大家分享下关于prison break以及越狱(prison break)到底是在讲个什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看

2026年10月15日 06:50

c程序设计第五版教学视频(求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!)

c程序设计第五版教学视频(求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!)

各位老铁们,大家好,今天由我来为大家分享c程序设计第五版教学视频,以及求C程序设计(第五版)谭浩强教材源代码、视频课件等电子版资料!谢谢大家!的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动

2026年10月15日 06:40

电脑教程入门(电脑初学入门)

电脑教程入门(电脑初学入门)

本篇文章给大家谈谈电脑教程入门,以及电脑初学入门对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月15日 06:20

十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)

十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)

“十六进制转二进制表”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看十六进制转二进制表(16进制转为2进制、8进制、10进制的公式)!

2026年10月15日 06:10

最近更新

issued retroactively(FORM E上盖“ISSUED RETROACTIVELY”的问题,小女在线等待)
2026-10-15 10:30:03 浏览:0
如何制作短视频(短视频怎么制作)
2026-10-15 10:20:11 浏览:0
f发音是什么?printf的返回值是什么
2026-10-15 10:10:03 浏览:0
热门文章

标签列表