仅使用指定的有限运算符是否能够实现整数列表排序?
结论
可以实现固定长度的整数序列排序,暂不支持任意长度的通用排序。
实现原理
因为当前环境没有循环能力,所以无法编写适配任意长度的通用排序逻辑,但可以针对固定数量的输入变量,用比较交换网络的思路,预先展开所有排序步骤完成排序:
你提供的min、max、set操作已经完全覆盖排序所需的比较、赋值能力,不需要额外逻辑控制。
示例实现(针对3个输入变量的场景)
针对你给出的输入示例,以下代码可以完成升序排序:
var a = v(2); var b = v(1); var c = v(3); var temp = v(0); // 第一步:对a、b做升序排序 set(temp, a); min(a, b); max(b, temp); // 第二步:对b、c做升序排序 set(temp, b); min(b, c); max(c, temp); // 第三步:再次对a、b做升序排序,完成整体排序 set(temp, a); min(a, b); max(b, temp);
运行后结果完全符合预期:a.value == 1、b.value == 2、c.value == 3。
扩展说明
如果需要排序N个固定数量的变量,只需要把冒泡/插入排序的每一轮比较交换步骤全部展开写死即可,N个变量最多需要N*(N-1)/2次比较交换步骤,全部可以用上述set+min+max的组合实现。
内容的提问来源于stack exchange,提问作者Walter Stabosz
相关产品推荐
相关产品推荐

