我正在尝试基于shell排序进行主观排序。我指的是原始的(Donald Shell)算法。我已经做出了所有逻辑,它与shell排序完全相同,但是用户不用主观地确定更大的值,而是由计算机来计算更大的值。 但是问题是我想向用户显示一个百分比或其他内容,以了解排序的距离。这就是为什么我想找到一种了解它的原因。
我尝试在这里提问(What is the formula to get the number of passes in a shell sort?),但也许上次我表现得不好,所以他们关闭了问题。 我首先尝试将进度与外壳排序数组中的通过次数相关联。但是最近,我注意到这不是一个固定数字。因此,如果您对这是显示排序进度的最佳方式的想法,我将不胜感激。
我做了这个公式,根据通过次数按颜色显示它,这是我能获得的最接近的公式,但它与颜色列表的最大范围并不完全匹配。 (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穿过数组的数量来工作。 只需使用(log(a.length)/ log(2))。floor()更改sqrt(a.length).ceil() 这行:
color: colors[(((pass - 1) * (colors.length - 1)) / (log(a.length) / log(2)).floor()).floor()]),