我一直在做一些面试问题的准备工作,并在此过程中提出了一个关于冒泡排序的小变体,它将我学到的关于二进制搜索的内容整合到内部循环中进行交换。因此,时间复杂度比O(n ^ 2)大约减少50%。我想我的问题是我是在浪费我的时间与Bubble排序?我应该学习Bucket Sort并完成它吗?
我一直在测试以下输入。
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;
}
要进行排序,请了解O(n log(n))
和O(n^2)
之间的区别,并知道如果您有足够的数据来关注您正在做的事情,您总是希望使用前者。
以下是您应该能够谈论的所有类型的排序。如果我正在采访你,我只关心你知道前两个。在告诉你如何写它之后我可能会要求你实现第三个,但我不在乎你是否知道它。
sort
实用程序或SQL中的ORDER BY
函数。当你需要抛出数据并做出选择时,不要将它吸入内存中进行排序,先将它排序到更高效的地方。O(n log(n))
排序更快,你需要知道这个。知道答案可能会让他们更加努力地表明他们的书呆子证书比你的更好。这将是我希望与他们合作的标志。