首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择排序比较

选择排序比较
EN

Stack Overflow用户
提问于 2012-11-03 03:03:05
回答 1查看 648关注 0票数 0

我必须跟踪这个选择排序中的所有比较,但是当我这样做时,1000个列表中的值只返回1。我不确定我是否正确地实现了它,但我确信我正确地放置了比较计数/。通常,选择排序具有固定数量的关键比较,但我们的讲师已禁止使用公式来跟踪它们。我很好奇为什么这个输出总是返回:

代码语言:javascript
复制
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;
}

任何想法都值得感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-03 03:08:45

我猜你的排序本身不起作用。您需要正确地初始化lastfirstsecond变量(特别是last),然后移动(递增)它们。

由于您的last 0,变量的默认值是,因此它不执行迭代,因为第二个循环中的条件是您所期望的loc<=last条件。我认为您需要将其初始化为:

代码语言:javascript
复制
 last = length-1;

还有一个问题:在两个循环中,您使用了相同的索引变量,即loc。我认为你需要使用两个不同的变量。

代码语言:javascript
复制
for (loc = 0; loc < length; loc++)
{
  comp+=1; 
   for(loc = first +1; loc<=last; loc++)
   {

一旦您修复了逻辑,使其执行完整的排序,您就会得到正确的计数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13201494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档