【问题标题】:Efficiency in swapping array elements vs Array indices交换数组元素与数组索引的效率
【发布时间】:2017-07-07 07:45:38
【问题描述】:

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

这是我写的:

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

【问题讨论】:

  • 如果你有两匹马,你想知道为什么一匹跑得更快,你为什么不自己赛马呢?为什么要我们告诉你哪个更快?
  • 这不是关于哪个更快。我还没有问他,但我只是想了解是否有合理的解释不直接在块内交换元素。仅仅是好的编程技术还是效率?
  • 它可能没有太大的实际差异,但第一个显然更好。

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


【解决方案1】:

您的代码稍微快一些,因为您只在a[j] &lt; a[i] 时进行交换,而您朋友的代码总是在进行交换。因此,在大多数情况下,您的代码会进行较少的交换。

两个代码的复杂度确实是一样的,但是你的“常量”更小,所以你的代码更快。

【讨论】:

  • 好的,谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-12-31
  • 2019-10-12
  • 2012-11-25
  • 2015-04-22
  • 2022-01-02
  • 2015-01-03
  • 2010-10-26
相关资源
最近更新 更多