gpt4 book ai didi

java - 我需要帮助以这种特定方式根据频率对 java 中的数组进行排序

转载 作者:行者123 更新时间:2023-12-01 22:15:02 25 4
gpt4 key购买 nike

需要帮助获取一个数组,计算频率,放入另一个数组,其中数组索引充当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]);
}
}

只是为了计算频率,但我认为我做错了

最佳答案

像下面这样的东西应该可以完成工作:

  • 由于您已经知道示例 9 中的最高值是多少,创建一个可容纳九个元素的频率数组。
  • 迭代您的输入数组,并为您发现的每个值增加频率值的索引值除以 1
  • 为索引创建一个计数器并将其初始化为 0
  • 在嵌套循环中迭代频率数组并替换输入数组中的值以及频率数组的索引。

我把复杂性的分析留给你

public static void countingSort(int[] a, int n ){
//counting
int[] freq = new int[n];
for(int i = 0; i<a.length; i++){
freq[a[i]-1]++;
}
//sorting
int index = 0;
for(int i = 0; i< freq.length; i++){
for(int j = 0;j < freq[i];j++){
a[index++]= i+1;
}
}
System.out.println(Arrays.toString(a));
}

关于java - 我需要帮助以这种特定方式根据频率对 java 中的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com