Yak*_*kov 10 c++ sorting algorithm
我提出以下问题(didn`t知道如何解决它所有的方法)给定一个阵列ARR的ñ int小号,我们需要理清it.We已经知道ķ的这个intS被放置在原来的ARR作为排序数组.(只是不知道他们中的哪一个)他们告诉我这样的排序要好得多nlogn- 我没有任何线索......任何建议?
小智 5
http://en.wikipedia.org/wiki/Radix_sort
关键事实是您正在处理整数并且您知道最大的键,这正是使用基数排序并且其复杂性是线性的。
还有第二种方法,如果其中 k 个已经排序,您可以使用某种版本的 shell 排序和序列,这将产生最佳结果
如果我们不知道:
k和如何n相互关联k元素在数组中的确切位置没有比?(nlog(n))在最坏的情况下我们可以做得更好的选择。
为什么:
k=1,祝你好运...k=0.9n让 k 个元素放在前面。即使我们知道它们在前面,那么我们仍然需要对 size 的数组进行排序0.1n,因此在最坏的情况下我们需要0.1*n*log(0.1*n)=0.1*n*(log(0.1)+log(n))=0.01*nlog(n)-0.1*n比较,即?(n*log(n)).当然,这只是最坏情况下的理论结果。在实践中,k正确位置上有确切元素的信息可以显着限制要完成的工作量。但可以肯定的是,我们需要更多地了解k和n(或至少假设某事)。