【问题标题】:Sorting array elements based on the frequency of each element根据每个元素的频率对数组元素进行排序
【发布时间】:2016-04-23 21:19:43
【问题描述】:

我正在寻找一种 C 中的算法,该算法按频率(从最少到最频繁)对数组元素进行排序。例如:

array[10] = {1, 1, 1, 5, 2, 3, 3, 3, 3, 4}; //initial array

array[10] = {5, 4, 2, 1, 1, 1, 3, 3, 3, 3}; //post-sorting array

频率相似的元素(上例中的 5、4 和 2)的顺序无关紧要,只要它们与其他频率相同的元素分组即可。

我不知道该怎么做,我看到了 THIS ,但是它在 matlab(我不知道)而不是 C 中,并且它严重依赖于库函数,我正在尝试不要做。

【问题讨论】:

    标签: c algorithm sorting


    【解决方案1】:

    您可以创建一个包含元素和元素频率的结构,并且您还可以通过增加 freq 字段来避免在向数组中插入元素时重复。

    例如:

    typedef struct elem{
         int value;
         int freq;
    } element;
    

    然后对数组element[N]进行频率排序,可能使用qsort之类的算法

    【讨论】:

      【解决方案2】:

      typedef 包含值和频率的结构。将它们中的10个组成一个数组做一个频率表,并将表数初始设置为0。

      迭代源数组并组装频率表,如果找到的值还没有表条目,则计数。

      使用qsort按频率升序对频率表进行排序。

      迭代排序的频率表,构建并输出数组。如果您愿意,可以使用输入数组作为输出数组。

      如果您不想使用 qsort 库函数,请替换您自己的排序。

      【讨论】:

        最近更新 更多