交换数组元素与数组索引的效率

Efficiency in swapping array elements vs Array indices

我有一个简短的问题:我知道这两个片段的复杂性是相同的。但是,我想知道哪个比较好,为什么?这是选择排序代码:

这是我写的:

            for (int i = 0; i < n - 1; i++)
            {
                for (int j = i + 1; j <= n - 1; j++) 
                {
                    if (a[j] < a[i]) 
                    {
                        int temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }

这是我朋友写的:

            for (int i = 0; i < n - 1; i++)
            {
                int iMin = i; 
                for (int j = i + 1; j <= n - 1; j++) 
                {
                    if (a[j] < a[i]) 
                    {
                        iMin = j;
                    }
                    int temp = a[i];
                    a[i] = a[iMin];
                    a[iMin] = temp;
                }
            }

您的代码稍快一些,因为您仅在 a[j] < a[i] 时进行交换,而您朋友的代码总是进行交换。因此,在大多数情况下,您的代码将减少交换。

两个代码的复杂度确实一样,但是你的"constants"更小,所以你的代码更快。