最小的C排序函数?(2008)

2020-05-30 00:35:20

过着危险的生活。与步骤10相同,但使用了现代的参数声明。(67字节,CF)实际上我在10之前写了11,但是错误地认为我必须恢复到古老的语法才能有一个不转换值的int函数。事实上,这是合法的;标准只是禁止使用缺失的结果。Jeremy Yallop用条件表达式替换了if。(66字节,CF)IF没有其他,所以条件中的第二个分支(:0)是无用的代码。尽管如此,这个技巧还是节省了一个字节。逗号的嵌套说明了条件句的两个分支的不对称性:只有第一个分支可以包含逗号。然后,他去掉了一个逗号,将FOR正文中除第一个逗号-子句之外的所有内容都移到了";INCREMENT";子句中。(65字节,CF)Grzegorz Lukasik观察到,至少有一个编译器(GCC)会在全局对象声明中推断说明符。(64字节,CF)错误:在C语言的早期允许这种行为,但它不符合当前的标准。不过,如果代码进行解译,它很可能会起作用。在这种方法中,第一个递归调用对数组中除第一个元素以外的所有元素进行排序。然后,如果FirstElement不是最小的,则与最小的元素交换,并再次对数组的其余部分进行排序。签名是s(第一个,最后一个+1)。(68字节)在主体中有两个递归调用,代码看起来好像其运行时间ISO(2 N),但更详细的分析显示它的O(N 3),与前一个程序相同。缺陷:即使数组为空,也可以访问一个元素。可以结合博客讨论中的几个建议来取得一些进展。首先,将签名更改为s(First,Length,Dummy)。(68字节)此代码不会自己完成所有工作,因为它依赖调用者通过提供伪参数为其分配临时存储空间。缺陷:访问数组末尾之外的一个元素,并在空数组上疯狂。然后抑制a的增量,以便于用显着的条件交换代替条件表达式。更改保护,--n⇒n--),以驯服一个缺陷。(67字节)小更改的重大影响:删除条件表达式会导致运行时间爆炸到O(2 N)