我在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,并且它在很大程度上依赖于库函数,某些东西我不想这样做。
答案 0 :(得分:2)
您可以创建一个包含元素和元素频率的结构,只需增加freq字段,就可以避免在将元素插入数组时出现重复。
例如:
typedef struct elem{
int value;
int freq;
} element;
然后按频率对数组element[N]
进行排序,可能使用像qsort
这样的算法
答案 1 :(得分:1)
typedef包含值和频率的结构。创建一个包含10个数组的数组来制作频率表,并将表计数最初设置为0。
迭代源数组并组装频率表,如果找到一个没有表条目的值,则计入计数。
使用qsort按频率递增对频率表进行排序。
迭代排序的频率表,随时构建和输出数组。如果愿意,可以使用输入数组作为输出数组。
如果您不想使用qsort lib功能,请替换您自己的类型。