【发布时间】:2018-01-14 14:01:17
【问题描述】:
我在我的一项作业中遇到了这个问题。我已经尝试找出解决方案几个小时,但似乎我做错了什么。
我需要按其数字的频率对数组进行排序,例如;
[-1.1, -1.1, 2.4, -3.0, 4.0, 2.4, -1.1, -3.0] => [-1.1, -1.1, -1.1 , 2.4, 2.4, -3.0, -3.0, 4.0]
[-0.5, 4.0, 6.5, 6.5, 4.0, -0.5] => [-0.5, -0.5, 4.0, 4.0, 6.5, 6.5]
我尝试过的,几乎可行的方法是创建一个名为 count() 的函数 此函数检查数组中出现双精度的次数,然后返回该数量。
然后我做了一个函数:
public static void sortByFreq(double[] arr)
public static void sortByFreq(double[] arr)
{
double temp;
for(int i = 0; i < arr.length; i++)
{
for(int j = 0; j < arr.length; j++)
{
if(count(arr, arr[i]) > count(arr, arr[j]))
{
// swap them if one of them appears more times(its count is bigger)
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i = 0; i < arr.length; i++) // print the numbers
{
System.out.print(arr[i] + " ");
}
}
使用这种方法,我设法得到了一个不完整的答案,例如 - 第一个示例运行良好并且打印正确。
第二个打印 [-0.5, 4.0, 6.5, 6.5, 4.0, -0.5] => [-0.5, 4.0, 6.5, 6.5, 4.0, -0.5 ]
如您所见,4.0 和 6.5 是混合的。我该如何解决这个问题?也许我应该尝试一些完全不同的东西?
编辑:我不知道如何使用链表,我不确定我们是否可以使用超出我们所学知识的任何东西。
【问题讨论】:
-
你为什么不直接输入
Arrays.sort(array) -
如果唯一的数量对你很重要,为什么你需要排序