【问题标题】:What is wrong in this sorting?这种排序有什么问题?
【发布时间】:2015-01-17 13:34:33
【问题描述】:

在最近的一次采访中,我被要求编写排序算法。我按照以下方式做到了。我想了解这种方法有什么问题?当我用 500 个整数进行测试时,它比冒泡排序给出了更好的时间复杂度。我问的原因是,那个面试官让我失望了。

static int[] SortedNumbers(int[] numbers)
{
    for (int i = 0; i < numbers.Length - 1; i++)
    {
        int temp;
        if (numbers[i] > numbers[i + 1])
        {
            temp = numbers[i];
            numbers[i] = numbers[i + 1];
            numbers[i + 1] = temp;
        }

        if (i > 0)
        {
            for (int j = 0; j < i; j++)
            {
                if (numbers[j] > numbers[i])
                {
                    temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
    }
    return numbers;
}

【问题讨论】:

  • 您需要了解 Big-Oh 分析。拿起一本算法书。
  • 我同意所有其他答案和 cmets,但我必须指出 if (i &gt; 0) 是完全没有必要的。

标签: c# bubble-sort


【解决方案1】:

这实际上是一种冒泡排序。面试官可能想了解一些众所周知的、更高效的算法,例如Quicksort。如果你要去面试,请准备好众所周知的算法,不要发明自己的算法!

此外,当您争论算法的运行时间时,不要使用算法运行的特定数据集,而是谈论运行时间特性。这可能是研究该主题的一个很好的切入点:

http://en.wikipedia.org/wiki/Big_O_notation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多