根据每个元素的频率对数组元素进行排序

时间:2016-04-23 21:19:44

标签: c algorithm sorting

我在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,并且它在很大程度上依赖于库函数,某些东西我不想这样做。

2 个答案:

答案 0 :(得分:2)

您可以创建一个包含元素和元素频率的结构,只需增加freq字段,就可以避免在将元素插入数组时出现重复。

例如:

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

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

答案 1 :(得分:1)

typedef包含值和频率的结构。创建一个包含10个数组的数组来制作频率表,并将表计数最初设置为0。

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

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

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

如果您不想使用qsort lib功能,请替换您自己的类型。