我必须跟踪这个选择排序中的所有比较,但是当我这样做时,只返回1000个列表中的值。我不确定我是否正确实现了它但我确信我放置了比较正确计算/。通常,选择排序具有固定数量的密钥比较,但我们的教师禁止使用公式来跟踪它们。我很好奇为什么这个输出不断返回:
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;
}
感谢任何想法
答案 0 :(得分:1)
我猜你的排序本身不起作用。您需要正确初始化last
,first
和second
变量(特别是last
),然后移动(递增)它们。
由于您的last
变量默认为0
,因此根据您的需要,第二个for循环中的loc<=last
条件不会执行迭代。我认为你需要将它初始化为:
last = length-1;
还有一个问题:在两个循环中,您使用的是相同的索引变量,即loc
。我认为你需要使用两个不同的变量。
for (loc = 0; loc < length; loc++)
{
comp+=1;
for(loc = first +1; loc<=last; loc++)
{
修复逻辑以便执行完整排序后,您将获得正确的计数。