我必须跟踪这个选择排序中的所有比较,但是当我这样做时,1000个列表中的值只返回1。我不确定我是否正确地实现了它,但我确信我正确地放置了比较计数/。通常,选择排序具有固定数量的关键比较,但我们的讲师已禁止使用公式来跟踪它们。我很好奇为什么这个输出总是返回:
comp = 1
swap = 1
template <class elemType>
void selectionSort(elemType list[], int length)
{
int loc, minIndex;
int first;
int last, second;
int swaps =0;
int comp = 0;
minIndex = first;
for (loc = 0; loc < length; loc++)
{
comp+=1;
for(loc = first +1; loc<=last; loc++)
{
comp+=1;
if(list[loc]<list[minIndex])
minIndex=loc;
comp+=1;
}
elemType temp;
temp= list[first];
list[first]= list[second];
list[second] = temp;
swaps+=1;
}
// comp = (length *(length-1)/2);
cout<<"swaps= "<<swaps<<endl;
cout<<"comps= "<<comp<< endl;
}任何想法都值得感谢。
发布于 2012-11-03 03:08:45
我猜你的排序本身不起作用。您需要正确地初始化last、first和second变量(特别是last),然后移动(递增)它们。
由于您的last 0,变量的默认值是,因此它不执行迭代,因为第二个循环中的条件是您所期望的loc<=last条件。我认为您需要将其初始化为:
last = length-1;还有一个问题:在两个循环中,您使用了相同的索引变量,即loc。我认为你需要使用两个不同的变量。
for (loc = 0; loc < length; loc++)
{
comp+=1;
for(loc = first +1; loc<=last; loc++)
{一旦您修复了逻辑,使其执行完整的排序,您就会得到正确的计数。
https://stackoverflow.com/questions/13201494
复制相似问题