这种排序有什么问题?
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。如果你要去面试,请准备好众所周知的算法,不要自己发明!
另外,当你争论运行算法的时间时,不要使用算法运行的特定数据集,而是谈论运行时间特性。这可能是研究该主题的一个很好的切入点:
在最近的一次面试中,我被要求编写排序算法。我是按照以下方式做的。我想了解这种方法有什么问题?当我用 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。如果你要去面试,请准备好众所周知的算法,不要自己发明!
另外,当你争论运行算法的时间时,不要使用算法运行的特定数据集,而是谈论运行时间特性。这可能是研究该主题的一个很好的切入点: