C语言 结构体如何排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 结构体如何排序相关的知识,希望对你有一定的参考价值。
typedef struct
char number[10];//书号
char name[50];//书名
char author[20];//作者
char publish[50];//出版社
char time[20];//出版时间
float price;//单价
mbook;
typedef struct
int count;//书的本数
mbook book[N];//最大可有书的数量
mlibrary;
mlibrary library;
问题出现在排序上,核心问题是不知道如何交换结构体。望高手解答,感谢~
一下是排序的程序源
void sort_by_number() /*定义按书号排序函数*/
struct mbooktemp;
int i,j,k;
for(i=0;i<library.count-1;i++)
k=i;
for(j=i+1;j<library.count;j++)
if(library.book[j].number<library.book[k].number)
k=j;
if(k!=i)
mbooktemp=library.book[k];
library.book[k]=library.book[i];
library.book[i]=mbooktemp;
还是不行呀,您的意思是这样?
typedef struct
char number[10];//书号
char name[50];//书名
char author[20];//作者
char publish[50];//出版社
char time[20];//出版时间
float price;//单价
mbook,mbooktemp;
定义一个字符串数组 char sn[10];
交换时进行如下修改
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[10];//书号
char name[50];//书名
char author[20];//作者
char publish[50];//出版社
char time[20];//出版时间
float price;//单价
mbook;
typedef struct
int count;//书的本数
mbook book[10];//最大可有书的数量
mlibrary;
mlibrary library,t;
main()
void sort_by_price(void);
sort_by_price();
void sort_by_price(void) /*定义按价格排序函数*/
int i,j,k;
char sn[10];
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);
; 参考技术A
排序需要比较,对于结构体,并没有现成的比较方式,必须人为指定结构体的比较方式。
可以使用qsort函数进行排序,使用该函数必须传入一个比较函数。
例如:
int mycmp(const void *a, const void *b)
return (*(Information *)a)->average > (*(Information *)b)->average ? 1 : -1;
C语言结构体排序
求问各位dalao
typedef struct
char thread_name[3];
unsigned int require_moment;
unsigned int persist_time;
TEST_INFO;
TEST_INFO test_data[]=
"r1",0,3,
"r2",1,6,
"w1",3,5,
"r3",2,5,
"w2",5,5,
"w3",4,5,
"r4",7,5,
"r5",9,5,
"w4",8,5,
"w5",12,5
;
要求对require_moment从小到大进行排序,然后输出排序后的thread_name,应该怎么做
代码如下:
typedef struct
char thread_name[3];
unsigned int require_moment;
unsigned int persist_time;
TEST_INFO;
TEST_INFO test_data[] =
"r1", 0, 3 ,
"r2", 1, 6 ,
"w1", 3, 5 ,
"r3", 2, 5 ,
"w2", 5, 5 ,
"w3", 4, 5 ,
"r4", 7, 5 ,
"r5", 9, 5 ,
"w4", 8, 5 ,
"w5", 12, 5
;
int main()
int i, j, size;
TEST_INFO temp;
// 数组元素个数
size = 10;
// 排序
for (i = 0; i < size - 1; i++)
for (j = i + 1; j < size; j++)
if (test_data[i].require_moment > test_data[j].require_moment)
memcpy(&temp, &test_data[i], sizeof(TEST_INFO));
memcpy(&test_data[i], &test_data[j], sizeof(TEST_INFO));
memcpy(&test_data[j], &temp, sizeof(TEST_INFO));
// 输出
for (i = 0; i < size; i++)
printf("%s ", test_data[i].thread_name);
printf("\\n");
return 0;
运行结果:
直接调用test_data[i].require_moment,就变成数字之间的比较大小
可以使用简单的冒泡排序,然后记下排序后数组的下标,依次输出 参考技术B #include<stdio.h>
typedef struct
char thread_name[3];
unsigned int require_moment;
unsigned int persist_time;
TEST_INFO;
TEST_INFO test_data[]=
"r1",0,3,
"r2",1,6,
"w1",3,5,
"r3",2,5,
"w2",5,5,
"w3",4,5,
"r4",7,5,
"r5",9,5,
"w4",8,5,
"w5",12,5
;
int main()
int i,j;
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(test_data[i].require_moment>test_data[j].require_moment)
TEST_INFO t=test_data[i];
test_data[i]=test_data[j];
test_data[j]=t;
for(i=0;i<10;i++)
printf("%s %d %d\\n",test_data[i].thread_name,test_data[i].require_moment,test_data[i].persist_time);
追问
这是冒泡排序吗?
追答对,你也可以用其它排序方式,这个不影响结果
本回答被提问者采纳以上是关于C语言 结构体如何排序的主要内容,如果未能解决你的问题,请参考以下文章