CountingSort with ArrayList



我正试图用ArrayList实现计数排序算法,但我遇到了一些困难。

在这段代码中,我想计算ArrayList中名为l的每个元素的出现次数。

我的代码:

List<Integer> l = // initializing the given list
/** initialize the occurrence of each element in the count array **/
List<Integer> count = new ArrayList<>(max-min+1);
for(int i = 0; i < l.size(); i++){

//count[arr[i]-min]++;
int index = l.get(i) - min; //ok
int value = 0;
value = value++;
count.set(index, value);
}

我找不到如何执行增量。

通过使用允许提供容量的ArrayList的参数化构造函数,您仍然可以得到空的ArrayList。不同之处在于,它将具有所需大小的底层数组,而不是默认大小的10

但是您仍然没有可访问的元素。为了用默认值填充ArrayList,可以使用另一个允许提供集合的参数化构造函数。

要创建一个大小为max - min + 1、填充有零整数(将传递给构造函数(的轻量级辅助列表,可以使用实用程序方法Collections.nCopies():

List<Integer> count = new ArrayList<>(Collections.nCopies(0, max - min + 1));
for (int i = 0; i < l.size(); i++) {
int index = l.get(i) - min;

int value = count.get(index);
count.set(index, value + 1);
}

注意坦率地说,用ArrayList而不是平面数组来实现计数排序不是很方便。如果是分配要求或自我施加的挑战,请确保您了解如何使用数组实现算法。

有不同的方法来增加原始数值变量,例如value
value++是其中之一,另外导致value的值在增量之前
我必须了解是否定义了递增value和分配给value = value++中的值之间的序列-
理智建议避免这样做。
我在下一步时使用递增运算符,在下一个处使用
,在value += 1处使用加1
(另一个最短的是++value……产生增量后的值。(

当在给定索引i处递增List<Integer> values中的值时,有两种可能性:
要么显式get()set(),像Alexander Ivanchenko建议的那样依赖于自动(非(拳击,
,要么使用可变整数-java.util.concurrent.atomic.AtomicIntegerset(newValue)getAndIncrement()incrementAndGet()

相关内容

  • 没有找到相关文章

最新更新