如何用MiniZinc对数组进行降序排序?
在MiniZinc中实现降序排序
当然可以借助内置的sort函数实现降序排序,核心就是对升序排序后的数组做反向遍历取值。
完整代码示例
% 示例输入数组,索引类型为1..5 array[1..5] of int: input = [3,1,4,2,5]; % 生成升序数组 array[1..5] of int: sorted = sort(input); % 通过反向索引推导得到降序数组 array[1..5] of int: reverse_sorted = [sorted[length(sorted) - i + 1] | i in index_set(reverse_sorted)]; % 输出结果验证 output ["升序结果: ", show(sorted), "\n降序结果: ", show(reverse_sorted)];
补充说明
- 如果你使用的是MiniZinc 2.0及以上版本,还可以直接用内置的
reverse函数简化代码:array[1..5] of int: reverse_sorted = reverse(sort(input));,效果完全一致 - 若输入数组的索引类型不是连续整数范围(比如自定义枚举),可以先将升序数组转换为1-based的临时数组再处理,或者直接用
reverse函数更省心
内容的提问来源于stack exchange,提问作者Mev
相关产品推荐
相关产品推荐

