c语言结构体数组指针排序,使用qsort对struct指针数组进行排序

博主在尝试使用C语言的qsort函数对`access_data`结构体数组进行排序时遇到了困扰。他们首先按到达时间排序,然后试图按扇区排序。然而,实际结果却是按反向到达时间排序。问题可能出在比较函数`compare_data`上,它目前只考虑了扇区的排序而未正确处理到达时间。为了解决这个问题,比较函数需要同时考虑两个排序条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尝试在这个结构数组上使用qsort,我得到了奇怪的结果.

我有这个结构:

struct access_data{

int sector;

int arrival_time;

int checked;

int processed;

};

我从文件构造一个access_data指针数组,使它们按到达时间排序,但我需要稍后按扇区对它们进行排序,所以我有以下内容:

int compare_data(const void* a,const void* b){

if (((access_data*)a)->sector < ((access_data*)b)->sector)

return 1;

else if (((access_data*)a)->sector > ((access_data*)b)->sector)

return -1;

else

return 0;

}

void scan(access_data* data[],int len,int sec_to_sec_seek){

qsort(data,len,sizeof(access_data*),&compare_data);

show_data(data,len);

}

show_data只是打印数据,但我在示例输入上得到以下内容;再次,按到达时间排序:

data[0]: arrival_time: 7,sector: 3

data[1]: arrival_time: 6,sector: 8

data[2]: arrival_time: 5,sector: 6

data[3]: arrival_time: 4,sector: 5

data[4]: arrival_time: 3,sector: 12

data[5]: arrival_time: 2,sector: 10

data[6]: arrival_time: 1,sector: 1

data[7]: arrival_time: 0,sector: 2

它不是按部门排序,而是按反向到达时间排序.我真的完全失去了导致这种行为的原因.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值