有没有一种方法可以计算排序算法的进度?

时间:2020-06-18 18:03:35

标签: sorting math dart shellsort

我正在尝试基于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()]),

0 个答案:

没有答案