【发布时间】:2014-04-03 05:16:36
【问题描述】:
在这个例子中,我的书向我展示了如何计算冒泡排序算法中的步数。代码中的每条注释都解释了添加到 steps 的金额的原因。
代码:
public void bubbleSort(ArrayList <Comparable> list){
steps = 0;
for (int outer = 0; outer < list.size() - 1; outer++){
for (int inner = 0; inner < list.size()-outer-1; inner++){
steps += 3;//count one compare and 2 gets
if (list.get(inner).compareTo(list.get(inner + 1)) > 0){
steps += 4;//count 2 gets and 2 sets
Comparable temp = list.get(inner);
list.set(inner,list.get(inner + 1));
list.set(inner + 1,temp);
}
}
}
}
查看steps += 4; 时,我明白他们为什么要添加4:仅仅是因为有2 个get 语句和2 个set 语句。但是在这一步steps += 3;//count one compare and 2 gets 我不明白为什么要添加 3。在if 语句之前的代码中哪里有比较语句?此外,if 语句之前的“2 个获取”在哪里?也许我误解了他们计算步数的方式,但这实际上是我提供的所有书。
【问题讨论】:
-
也许 list.size()x2 是你的 2 次获得,比较是内部
-
好吧,那么外部 for 中的
list.size()也会被计算在内。