选择排序比较

时间:2012-11-02 19:03:05

标签: c++

我必须跟踪这个选择排序中的所有比较,但是当我这样做时,只返回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;
}

感谢任何想法

1 个答案:

答案 0 :(得分:1)

我猜你的排序本身不起作用。您需要正确初始化lastfirstsecond变量(特别是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++)
   {

修复逻辑以便执行完整排序后,您将获得正确的计数。