我正在使用c ++并使用插入排序
在插入排序算法中,我们应该设置一个计数器来监控项目移动次数和项目比较次数。我已将我的设置包括在下面
void InsertionSort::insertion_sort()
{
int key,i,count = 0;
for(int j=1;j<10;j++)
{
key=Arr1[j];
i=j-1;
while(Arr1[i]>key && i>=0)
{
Arr1[i+1]=Arr1[i];
i--;
numberOfItemMovements++;
}
Arr1[i+1]=key;
}
}
}
正如你所看到的,我似乎无法找出应该放置比较计数器的位置,尽管项目移动计数器是好的并且按预期工作。感谢
答案 0 :(得分:1)
一种让它发挥作用的方法是在循环中使用numberOfComparisons。
while(++numberOfComparisons && Arr1[i]>key && i>=0)
{
Arr1[i+1]=Arr1[i];
numberOfItemMovements++;
i--;
}
1)您是否理解为什么++numberOfComparisons
可以在while循环中使用但numberOfComparisons++
会失败?
2)你有一个问题,可以评估Arr1 [-1]。你能弄清楚这发生了什么,以及你如何改变代码来解决它?
答案 1 :(得分:0)
运动计数器确实是正确的。
为了实现比较计数器,您需要稍微重构一下代码。特别是,您需要能够区分Arr1[i]>key
和i>=0
,因为其中一个需要进行比较,而另一个则不需要。
因为这看起来像是家庭作业,所以我会留下其余部分让你弄明白。