我正在尝试基于 shell 排序进行主观排序。我指的是原始(Donald Shell 的)算法。我已经做了所有的逻辑,它与 shell 排序完全相同,但不是计算机计算什么更大,而是用户主观地确定什么更大。但问题是我想向用户显示一个百分比或其他东西,让用户知道它已经排序了多远。这就是为什么我想找到一种方法来了解它。
我试着在这里问(什么是获得shell排序通过次数的公式?),但也许我上次没有很好地表达自己,他们结束了这个问题。我首先尝试将进度与 shell 排序中数组中的通过次数相关联。但最近,我注意到它不是一个固定的数字。因此,如果您知道如何以最佳方式显示排序进度,我将不胜感激。
我做了这个公式,根据遍数按颜色显示它,这是我能得到的最接近的,但它与颜色列表的最大范围不完全匹配。(Dart/Flutter 中的代码)
List<Color> colors = [
Color(0xFFFF0000),//red
Color(0xFFFF5500),
Color(0xFFFFAA00),
Color(0xFFFFFF00),//yellow
Color(0xFFAAFF00),
Color(0xFF00FF00),
Color(0xFF00FF00),//green
];
[...]
style: TextStyle(
color: colors[(((pass - 1) * (colors.length - 1)) / sqrt(a.length).ceil()).floor()]
),
[...]
我不需要这样做,所以如果您知道如何显示排序的进度,请分享。
编辑:我想我找到了答案!至少对于 shell 排序,它是根据 os 通过数组的数量来工作的。只需将 sqrt(a.length).ceil() 更改为 (log(a.length) / log(2)).floor() 这行:
color: colors[(((pass - 1) * (colors.length - 1)) / (log(a.length) / log(2)).floor()).floor()]),