【发布时间】:2014-08-06 17:31:28
【问题描述】:
问题来了:
给定一个整数数组,根据元素的频率对数组进行排序。比如输入数组是{2, 3, 2, 4, 5, 12, 2, 3, 3, 3, 12},那么修改数组为{3, 3, 3, 3, 2, 2, 2、12、12、4、5}。如果 2 个数字具有相同的频率,则打印第一个出现的数字。
我知道如何做部分。这是我的方法。
我将创建一个结构,如下所示:
typedef struct node
{
int index; // for storing the position of the number in the array.
int count; // for storing the number of times the number appears
int value; // for storing the actual value
} a[50];
我将创建一个由这些结构组成的数组,然后我将根据它们的计数通过排序算法对其进行排序。但是,我怎样才能确保如果两个元素的频率相同,那么应该出现具有较小索引值的数字?
【问题讨论】:
-
您使用两个排序标准。首先应该检查的标准是出现的频率或数量。当频率相等时应检查的次要标准是
index数字。 -
您需要为此编写自己的排序例程。自从我使用 C 语言以来已经有一段时间了——在 Java 中,我会编写一个函数来比较两个实例并报告更大的实例,然后我可以使用 Collections.sort。你可以在 C 中做类似的事情。
-
您的问题已被提出并回答。 here is one way.
-
我真的不明白你将如何使用这种方法来做到这一点,但如果你已经准备好了,可以考虑在结构中添加另一个整数变量,称之为@987654324 @ 与
index不同,它保持不变并保持初始索引的值。如果碰巧有平局,就打破平局。 -
@ryyker 这个答案并不能完全解决这个问题。虽然它可以,但经过一些体面的修改,它仍然缺少最重要部分的修复,即 3745736 要求他/她打破平局所需的部分。