gpt4 book ai didi

c - 对带有数字和字符的结构进行qsort,首先对数字进行排序,然后对具有相同数字的字母表进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:19 25 4
gpt4 key购买 nike

想要对带有数字和字符的结构进行排序,首先对数字进行排序,然后对具有相同数字的字母表进行排序这是我的结构

typedef struct{
char word[101];
int freq;
}WordArray;

这是我遵循的逻辑:先按频率排序 ()

int cmpffunc (const void * a, const void * b)
{
WordArray *WordArrayA = (WordArray *)a;
WordArray *WordArrayB = (WordArray *)b;
return ( WordArrayB->freq - WordArrayA->freq );
}
qsort(array, arrayLength, sizeof(WordArray), cmpffunc);

效果很好,然后我尝试使用相同的频率编号对字母表进行排序。这是我尝试过的,但没有一个能按预期工作:

int cmpwfunc (const void * a, const void * b)
{
WordArray *A = (WordArray *)a;
WordArray *B = (WordArray *)b;
if (A->freq == B->freq){
return strcmp(A->word,B->word);
}
else{
return -1;
}
}
qsort(array, arrayLength, sizeof(WordArray), cmpwfunc);

任何建议将不胜感激。

最佳答案

第二个版本的问题是 A->freqB->freq 相等。在那种情况下,您不能只return -1。在那种情况下,你需要比较A->freqB->freq 就像您在第一个函数中所做的那样。所以……

改变

else{
return -1;
}

return ( B->freq - A->freq );

或者更好 - 将其更改为

if ( B->freq > A->freq ) return 1;
return -1;

关于c - 对带有数字和字符的结构进行qsort,首先对数字进行排序,然后对具有相同数字的字母表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52391737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com