【发布时间】:2019-10-30 21:31:35
【问题描述】:
需要帮助获取一个数组,计算频率,放入另一个数组,数组索引作为数字,单个值作为 Java 中的频率
您可以使用 n 的数组计数对范围为 1 到 n 的 m 个整数组成的大型数组进行排序 条目来计算数组中每个整数的出现次数。例如,考虑 下面的数组 A 包含 14 个整数,范围从 1 到 9(请注意,在这种情况下 m = 14 和 n = 9):
9 2 4 8 9 4 3 2 8 1 2 7 2 5
形成一个由 9 个元素组成的数组 count,使得 count[i-1] 包含 i 的次数 出现在要排序的数组中。因此,计数是
1 4 1 2 1 0 1 2 2
特别是,
-
count[0] = 1因为 1 在 A 中出现一次。 - count[1] = 4,因为 2 在 A 中出现了 4 次。
- count[2]=1,因为 3 在 A 中出现一次。
- count[3] =2,因为 4 在 A 中出现了 2 次。
使用count数组对原数组A进行排序。在函数中实现这个排序算法
public static void countingSort(int[] a, int n )
并根据m(数组a的长度)和n分析其最坏情况的运行时间。 调用countingSort()后,a必须是排序数组(不要将排序结果存储在a中) 临时数组)。
编辑: 这是我尝试过的
public static void countingSort1(int[] a, int n) {
int [] temp = new int[n];
int [] temp2 = new int[n];
int visited = -1;
for (int index = 0; index < n; index++) {
int count = 1;
for (int j = index +1; j < n; j++) {
if(a[index] == a[j]) {
count++;
temp[j] = visited;
}
}
if (temp[index]!= visited) {
temp[index] = count;
}
}
for(int i = 1; i < temp.length; i++) {
if (temp[i] != visited) {
System.out.println(" " +a[i] + " | " +temp[i]);
}
}
只是为了计算频率,但我认为我做错了
【问题讨论】:
-
分享你的尝试,一些代码
-
你必须通过计数排序来解决它吗?或者你只关心最终的数组?
-
1.创建一个包含 n 个元素的频率数组“farray”。并将其中的所有元素初始化为零。 2. 对于原始数组“a”的每个元素“x”,递增 farray[x]。注意:这适用于小的 n。但是可以说如果 n 类似于 2000000000 那么你将需要大量内存,很可能分配会失败
-
temp2是做什么用的? -
@AKS "将其中的所有元素初始化为零" 不需要。该数组已被 Java 初始化为全零。