我一直在做一些面试问题的准备工作,在此过程中,我在Bubble Sort上提出了一个小变体,将我对二进制搜索的了解融入了交换的内循环中。因此,时间复杂度比O(n ^ 2)大约降低了50%。我想我的问题是我是在浪费我的时间在冒泡排序吗?我应该学习桶分类并完成它吗?
我一直在用以下输入进行测试。
int[] nums = { 9878, 1, 4, 8, 5, 7, 88, 1, 54, 2, 2, 9878, 5, 7, 3, 11, 1, 4, 8, 5, 7, 88, 1, 54, 2, 2, 5, 7, 3, 11 };
public static int[] sortWBinary(int[] ar)
{
var swapped = true;
for (int i = 0; i < ar.Length && swapped; i++)
{
swapped = false;
for (int k = i, j = ar.Length - 1; k < ar.Length - i - 1 && j > 0; k++, j--)
{
if (ar[k] > ar[k + 1])
{
var temp = ar[k];
ar[k] = ar[k + 1];
ar[k + 1] = temp;
swapped = true;
}
if (ar[j - 1] > ar[j])
{
var temp = ar[j - 1];
ar[j - 1] = ar[j];
ar[j] = temp;
swapped = true;
}
}
}
return ar;
}
VS。
public static int[] sortWoBinary(int[] ar)
{
var swapped = true;
for (int i = 0; i < ar.Length && swapped; i++)
{
swapped = false;
for (int k = 0; k < ar.Length - i - 1; k++)
{
if (ar[k] > ar[k + 1])
{
var temp = ar[k];
ar[k] = ar[k + 1];
ar[k + 1] = temp;
swapped = true;
}
}
}
return ar;
}
答案 0 :(得分:-1)
要进行排序,请了解O(n log(n))
和O(n^2)
之间的区别,并知道如果您有足够的数据来关心自己的工作,就总是希望使用前者。
这里是您需要谈论的所有类型的排序。如果要面试您,我只关心您知道前两个。在告诉您如何编写后,我可能会要求您实施第三个,但是我不在乎您是否知道它。
sort
实用程序或SQL中的ORDER BY
函数。当您需要抛弃数据并做出选择时,请不要将其吸入内存以对其进行排序,而是先将其排序为效率更高的地方。O(n log(n))
快,您将需要了解这一点。知道答案可能会导致他们更加努力地证明他们的书呆子证书比您的书呆子证书更好。这将是我不想与他们合作的标志。