C-按计数排序,然后按字母顺序

理查德·特林(Richard Trinh)

我正在尝试运行qsort,以首先按数字排序,然后按字母顺序排序。数组字为:

COPY 3
CLOSER 2
TAUGHT 2
AW 2
LOOKS 2
SHAD 3
HA 3

结构是:

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

到目前为止,我的比较功能是:

int compare(const void *c1, const void *c2){
    Word *a1 = (Word *)c1;
    Word *b1 = (Word *)c2;
    return (b1->freq - a1->freq);
}

我的qsort函数是:

qsort(words, count, sizeof(Word), compare);

但是我不知道如何按频率对它进行字母排序。

拉斐尔

理查德,请注意以下几点:

  1. 分配给非void指针时,我不抛出void指针
  2. 我不为此使用typedef
  3. 为了获得数组的长度,我将数组的大小除以数组中第一个元素的大小
  4. 我用char *struct word
  5. 我不只是简单地减去中的频率compare_words为了推导顺序,我实际上使用了if,else if,else。根据操作数的不同,简单地减去整数可能会产生奇怪的行为。
  6. const在比较函数中维护指针以强制不变性。

码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct word {
    char *str;
    int freq;
};

int compare_words(const void *a, const void *b)
{
    const struct word *w1 = a;
    const struct word *w2 = b;

    int order;

    if (w2->freq > w1->freq) {
        order = 1;
    } else if (w2->freq < w1->freq) {
        order = -1;
    } else {
        order = strcmp(w1->str, w2->str);
    }

    return order;
}

int main(int argc, char const *argv[])
{
    struct word mywords[] = {
        { "BAR", 2 },
        { "BAS", 2 },
        { "ACK", 2 },
        { "FOO", 8 },
        { "ZIP", 1 }
    };

    int len = sizeof(mywords) / sizeof(mywords[0]);

    qsort(mywords, len, sizeof(mywords[0]), compare_words);

    int i;
    for (i = 0; i < len; i++) {
        struct word w = mywords[i];
        printf("%s\t%d\n", w.str, w.freq);
    }

    return 0;
}

输出:

FOO 8
ACK 2
BAR 2
BAS 2
ZIP 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++按数值对tuple <string,float>的向量进行排序,然后按字典顺序

C# LINQ 按属性组集合,然后按列表定义的显式顺序对每个组进行排序

按值对Hashmap排序,然后按字母顺序排序

C#,按字母顺序对LINQ结果进行排序,然后根据搜索键对它进行排序

C#-按州然后按城市对数据排序的最简单方法

按数据属性(按字母顺序,然后按数字顺序)对列表项进行排序

如何使用sort_by按字母顺序然后按数字顺序然后按特殊字符排序

如何按字母顺序对 csv 数据进行排序,然后按列按数字排序?

在C中按字母顺序对链接列表进行排序

Unixy按字母顺序对C原型进行排序的方式

C ++按字母顺序对结构进行排序的向量

在C中按字母顺序对单词进行排序

链表按字母顺序排序,c中存在seg错误

在C#中按字母顺序对list <class>进行排序

按字母顺序对C字符串数组进行排序

相交按字母顺序对结果进行排序C#

c编程链表按字母顺序排序名称

按字母顺序,按未由APPLE开头的字母排序,然后按以APPLE开头的字母排序

熊猫value_counts:按值排序,然后按字母顺序排序?

按子数组类型值排序,然后按字母顺序排序

MySQL-如何按名称排序,然后按字母数字顺序在表上排序?

MySQL-按多个单词排序,然后按字母顺序排序?

MongoDB:按现有字段排序,然后按字母顺序排序

PHP高级按数字先排序,然后按字母顺序排序

按长度排序数组,然后按字母顺序排序

按字段对对象数组进行排序,然后按字母顺序排序

Python按降序排序字典,然后按字母顺序排序

按字母顺序对字符数组进行排序,然后按长度排序

SQL如何用数字按字母顺序排序文本,然后按数字排序