比较数量和项目移动数量

时间:2012-06-13 14:16:21

标签: c++

我正在使用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;
}
}
}

正如你所看到的,我似乎无法找出应该放置比较计数器的位置,尽管项目移动计数器是好的并且按预期工作。感谢

2 个答案:

答案 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]>keyi>=0,因为其中一个需要进行比较,而另一个则不需要。

因为这看起来像是家庭作业,所以我会留下其余部分让你弄明白。