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

更多文章:
repercussions(都是余波,repercussions和aftermath有什么区别啊)
2026年10月11日 09:00
dropdownlist 绑定(DropDownList 绑定所有项 并 显示指定项)
2026年10月11日 08:50
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00




