void selection_sort(void)
{
int i, j, min, temp;
for (i = 0; i < LEN; i++)
{
for (j = min = i; j < LEN; j++)
if (a[min] > a[j])
min = j;
if(i != min)
{
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
}
如果再加一个判断,是否交换的次数可以进一步减少?尤其对已有序数列?
在我的印象中,时间复杂度的问题应该是“基本操作的次数与问题规模的函数关系”,且是一个极限的问题。其中的“基本操作”既包含比较,也包含交换。当然,相对而言,交换操作比比较操作还是要稍微耗时些。但在“极限”这个角度,这样的差别通常可以忽略。再如,假设某算法时间复杂度为O(n^2 / 2),通常可以认为就是O(n^2)。这也说明“极限”的概念是时间复杂度概念中的重要原则。
所以,我比较支持观弈寒儒。不过,还是希望卧龙孔明先生能发表自己的高见,供大家学习学习。