我在我的作业中遇到了一个问题。我已经尝试了好几个小时来找出一个解决方案,但似乎我做错了什么。
我需要按数字出现的频率对数组进行排序,例如;
[-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()的函数,该函数检查数组中某个double值出现的次数,然后返回该数量。
然后我编写了一个函数:
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)
呢? - Basil Battikhi