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);
}
}
} ;
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-08-15

    排序需要比较,对于结构体,并没有现成的比较方式,必须人为指定结构体的比较方式。

    可以使用qsort函数进行排序,使用该函数必须传入一个比较函数。

    例如:

    int mycmp(const void *a, const void *b){
       return (*(Information *)a)->average > (*(Information *)b)->average ? 1 : -1;
    }

第2个回答  2010-12-29
逐个成员交换是一种办法,另外,考虑换用链表应该更容易些,效率也会提高。。
相似回答