这种排序有什么问题?

What is wrong in this sorting?

在最近的一次面试中,我被要求编写排序算法。我是按照以下方式做的。我想了解这种方法有什么问题?当我用 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;
}

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

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

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