想对具有数字和字符的结构进行qsort,首先对数字进行排序,然后对具有相同数字的字母进行排序 这是我拥有的结构
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);
任何建议将不胜感激。
答案 0 :(得分:2)
第二个版本的问题是A->freq
和B->freq
不相等。在这种情况下,您不能仅return -1
。在这种情况下,您需要比较
A->freq
和B->freq
就像您在第一个函数中所做的一样。所以...
更改
else{
return -1;
}
到
return ( B->freq - A->freq );
或者更好-将其更改为
if ( B->freq > A->freq ) return 1;
return -1;