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)。这也说明“极限”的概念是时间复杂度概念中的重要原则。
所以,我比较支持观弈寒儒。不过,还是希望卧龙孔明先生能发表自己的高见,供大家学习学习。