好吧...有59个(现在有60个)标记为sorting的问题,但没有简单的quicksorts。
必须解决。
对于那些不熟悉quicksort的人,以下是细分,由Wikipedia提供:
- 从数组中选择一个元素,称为数据透视。
- 对数组重新排序,以使所有值小于枢轴的元素都位于枢轴之前,而所有值大于枢轴的元素都位于枢轴之后(相等的值可以任意选择)。分割之后,枢轴处于其最终位置。这称为分区操作。
- 将上述步骤递归应用于值较小的元素的子数组,并分别应用于值较大的元素的子数组。
规则
规则很简单:
- 用您选择的编程语言实现数字快速排序。
- 支点应随机选择,或选择三个中间值(第一个,最后一个和中间元素)。
- 您的程序可以是完整的程序或功能。
- 您可以使用STDIN,命令行参数或函数参数获取输入。如果使用字符串输入,则输入以空格分隔。
- 输入中可能包含十进制和负值。但是,不会重复。
- 您可以输出到STDOUT或从函数返回。
- 没有内置的排序功能(或与排序相关的功能)或标准漏洞。
- 该列表可以是任意长度。
奖金#1:在长度<= 5的列表或子列表上,使用插入排序可以稍微加快速度。奖励:-15%。
奖金2:如果您的语言支持并发,则可以对列表进行并行排序。如果在子列表上使用插入排序,则最终的插入排序不需要并行。内置线程池/线程调度是允许的。奖励:-15%。
注意:中位数3使某些人感到困惑,因此(再次)由Wikipedia提供以下说明:
选择枢轴分区的第一个,中间和最后一个元素的中位数
计分
这是代码高尔夫球。基本分数以字节为单位。如果您获得一笔红利,请从该数字中扣除15%。如果两者兼得,则可享30%的折扣。听起来确实像是推销。
这并不是要找到总体上最短的答案,而是要找到每种语言中最短的答案。
现在,这是排行榜片段的无耻复制。
排行榜
这篇文章底部的Stack Snippet从答案a)生成目录,答案是每种语言的最短解决方案列表,b)则是总体排行榜。
为确保您的答案显示出来,请使用以下Markdown模板以标题开头。
## Language Name, N bytes
其中N是您提交的文件的大小。如果您提高了分数,则可以通过打败旧分数来保持标题。例如:
## Ruby, <s>104</s> <s>101</s> 96 bytes
如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:
## Perl, 43 + 2 (-p flag) = 45 bytes
您还可以将语言名称设置为链接,然后该链接将显示在代码段中:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes