病理分选
您的老板要求您开发一种排序算法,以提高公司应用程序的性能。但是,编写该应用程序后,您知道您不可能使其速度大大提高。不想让您的老板失望,您决定开发一种新算法,该算法对某些数据集的效果甚至比* sort好。当然,您不能使该算法仅在某些情况下起作用是显而易见的,因此您希望使其模糊。
竞赛的目的是用您选择的语言编写一个排序例程,该例程在某些数据集上的表现要优于其他数据集,并具有可重复的结果。确定速度的分类越具体越好。该算法必须进行某种排序,因此依赖于已完全排序的数据的算法(例如,什么都不做的算法)或依赖于已完全反向排序的数据的算法都是无效的。排序算法必须正确地对任何数据集进行排序。
介绍完例程后,请说明为什么它仅适用于某些数据集,并包括对至少一组良好(快速)数据和一组不良(缓慢)数据的测试。这里的目的是要向老板证明,您偶然发现了一种更好的排序方式,因此,更多的测试数据会更好。当然,您只会向老板展示来自良好数据的测试结果,因此所需测试数据中的缺陷不会太明显。如果适用于您的语言,请说明您的算法比语言的内置排序算法更快。
例如,可能会提交一种插入排序算法,其中好数据是已经接近排序的数据,坏数据是完全随机的数据,因为插入排序对接近排序的数据接近O(n)。但是,这不是很好,因为我的老板可能会注意到所有测试数据几乎都是从头开始排序的。
这是一场人气竞赛,因此7天(5月21日)后获得最高票数的答案将获胜。
如果没有人能击败我,我想提交一个利用统一分布的数据集的社区Wiki答案。