gpt4 book ai didi

c++ - 选择排序比较

转载 作者:行者123 更新时间:2023-11-28 07:53:44 25 4
gpt4 key购买 nike

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

任何想法表示赞赏

最佳答案

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

由于您的 last变量默认为 0 ,由于 loc<=last,它没有执行迭代根据需要在第二个 for 循环中设置条件。我认为您需要将其初始化为:

 last = length-1;

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

for (loc = 0; loc < length; loc++)
{
comp+=1;
for(loc = first +1; loc<=last; loc++)
{

一旦您修复逻辑使其执行完整排序,您将获得正确的计数。

关于c++ - 选择排序比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com