[英]Java Insertion Sort: Counting Data Comparisons
我试图使用Java为这个插入排序算法的数据比较和数据交换的数量设置一个计数器。 虽然我认为计数器swapsNo正确放置,但compsNo没有给我预期的输出(两者都初始化为零)。 在将compElem与列表项进行比较的情况下,我最初将它放在目前要计数的位置,但显然这只是对列表中每个项目的计数器进行计数。 我想知道计数器是否应该在算法中或在其他地方完全出现两次。
public void insertionSort(T[] list, int length)
{
for (int firstOutOfOrder = 1; firstOutOfOrder < length;
firstOutOfOrder ++)
{
Comparable<T> compElem =
(Comparable<T>) list[firstOutOfOrder];
compsNo++;
if (compElem.compareTo(list[firstOutOfOrder - 1]) < 0)
{
Comparable<T> temp =
(Comparable<T>) list[firstOutOfOrder];
//or perhaps compsNo++; should go here??
int location = firstOutOfOrder;
do
{
list[location] = list[location - 1];
location--;
swapsNo++;
}
while (location > 0 &&
temp.compareTo(list[location - 1]) < 0);
list[location] = (T) temp;
}
}
}
更新:我在while循环中添加了compsNo ++的增量(以前是doWhile),并在if语句中为swapsNo ++增加了增量。 这接近预期的输出,但我对我的编辑不太自信。
public void insertionSort(T[] list, int length)
{
for (int firstOutOfOrder = 1; firstOutOfOrder < length;
firstOutOfOrder ++)
{
Comparable<T> compElem =
(Comparable<T>) list[firstOutOfOrder];
compsNo++;
if (compElem.compareTo(list[firstOutOfOrder - 1]) < 0)
{
Comparable<T> temp =
(Comparable<T>) list[firstOutOfOrder];
int location = firstOutOfOrder;
while (location > 0 && temp.compareTo(list[location - 1]) < 0)
{
compsNo++;
list[location] = list[location - 1];
location--;
swapsNo++;
}
list[location] = (T) temp;
swapsNo++;
}
}
}
如果你想计算比较,你应该在包含对compareTo
的调用的每一行之前或之前增加compsNo
。
在您的代码中,您有两个compareTo
调用,只有一个compsNo++
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.