我正在尝试为自己的选择排序算法。但是由于某种原因,该算法在倒数第二个元素处停止。有人可以帮助我理解为什么我的排序不包括最后两个元素。
void selection_sort(int a[],int size)
{
int start = -1;
int fin_index;
int smallest;
while(start<=size)
{
start++;
fin_index = start;
int smallest_elem = a[start];
for(int i=start;i<size;i++)
{
if(a[i]<smallest_elem)
{
smallest_elem = a[i];
smallest = i;
}
}
swap(a[fin_index],a[smallest]);
}
}
进入“ for”循环之前,您尚未初始化“最小”变量。
将其初始化为fin_index。 (最小= fin_index)
如果元素已经在其排序位置,则它将与先前的最小值交换。
另外,您的while循环运行大小+2倍。 while循环最多只能运行“大小”时间,因为我们想要最少的“大小”时间。
这两个错误会导致您的实现失败。