选择排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:00:07
Status Selection_Sort(List A);
len=ListLength(A);
for(i=0;i<len-1;i++){
min=i;
for(j=i+1;j<len;j++)
if(A[j]<A[min])
min=j;
if(i!=min){
swap(A[i],A[min]);
}
}
return 1;

//////////////////////////////////////////////
其中, if(i!=min) 实现什么功能呢?为什么要判断min不等于i???

这句话判断用不用交换当前链表中两个数
因为当前i指向的数可能就是最小的数,此时在后一个for循环中是不执行“min=j”这句话的,那么,min就等于i,不需要交换。
i指向了一个数,j指向i后面的数,比较这两个数的大小然后判断用不用交换,如果i指向的数就是最小的,那么不用交换了。

if(i!=min)
{
swap(A[i],A[min]);
}
swap函数功能是把第i个元素和第min个元素交换位置,如果i等于min了就不用交换了。
所以只有i!=min时,才执行swap(A[i],A[min])语句