多年前,在一次求职面试中,我被问到:什么时候排序阵列值得?我记得不能正确回答,最近我做了一个算法课程,我得出结论,提供更“学术化”的反应可能会让我得到那份工作......无论如何,不可能修复过去到目前为止,我正试图正式回答它,目前,这就是我所在的地方:
给定一个数组,搜索时间为
考虑在O(n * log(n))
中快速排序什么时候对数组进行排序?它当然取决于我们要搜索数组的次数。
x的价值是什么?
答案 0 :(得分:2)
我个人会回答,如果满足以下任何条件,则值得对数组进行排序:
如果可以在O(n)中对数组进行排序(例如,数据满足排序计数的标准),我们将从搜索操作开始获取(因此总时间,包括排序所需的时间,将k次操作后,小于搜索未排序数组所花费的时间,其中<strong> k = constantOfSortingOperation /(n / log(n))(排序数据除以搜索的增益所花费的时间分拣机阵列)。
如果我们在O(nlogn)中对数组进行排序,请使用ex。 HeapSort或QuickSort(其中隐藏在big-O表示法中的常量很小)我们将在 k =(constant * nlogn)/(n / logn)之后开始从搜索操作中获益。 constant / nlogn基本上是多少次我们可以搜索未排序的数组,如果我们不把时间花在排序上,而是花在搜索上。 n / logn是分类器数组中单个搜索与未排序数组中的搜索相比所获得的数量。因此,如果我们认为常数很小(远小于n),我们开始获得后的时间(= x,更多或更少)将近似 n * logn * logn / n =(log(n))^ 2。强>
如果我们包括从获得最大/最小值的增益计算,我们开始从更快地排序数组获得。