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

时间:2017-07-07 07:45:38

标签: c# arrays sorting compare-and-swap

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

这就是我写的:

            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;
                }
            }

1 个答案:

答案 0 :(得分:1)

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

两个代码的复杂性确实相同,但是你的“常量”更小,所以你的代码更快。