我一直在做一些面试问题的准备,在这个过程中,我想出了一个关于泡泡排序的小变体,它将我所学到的关于二进制搜索的知识融入到交换的内部循环中。因此,时间复杂度比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;
}诉.
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;
}发布于 2019-04-22 20:51:46
对于排序,要知道O(n log(n))和O(n^2)之间的区别,并且知道如果您有足够的数据来关心您正在做的事情,您总是希望使用前者。
以下是你需要谈论的所有类型的分类。如果我要采访你,我只关心你知道前两件事。我可能会要求您在告诉您如何编写它之后实现第三个,但我不在乎您是否知道它。
sort实用程序或ORDER BY函数。当你需要抛出数据并有选择的时候,不要把它吸进你的记忆中去排序,先把它排序到更有效率的地方。O(n log(n))更快地排序,你就需要知道这个问题。知道答案可能会让他们更加努力地工作,以证明他们的书呆子资历比你的好。这将是我不想和他们合作的一个标志。https://stackoverflow.com/questions/55785227
复制相似问题