【发布时间】:2020-06-18 14:50:55
【问题描述】:
我指的是原始(Donald Shell 的)算法。我正在尝试基于 shell 排序进行主观排序。我已经做了所有的逻辑,它与 shell 排序完全相同,但不是计算机计算什么更大,而是用户主观地确定什么更大。但我想向用户显示一个百分比或其他东西,让用户知道它已经排序了多远。这就是为什么我想找到一种方法来了解它。
在 shell 排序中获得通过次数的公式是什么?我注意到这个数字不是固定的,那么最小值和最大值是多少? N和N^2?或者,如果您知道如何以最佳方式显示排序进度,我将不胜感激。
PS:不是比较次数的问题!也与时间复杂度无关。我的问题是关于数组中的传递次数。
我做了这个公式,用颜色显示它。但它不适用于正确的范围。
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 排序的计算复杂性 并没有让您找到问题的答案。或者,如果您一直在搜索其他术语,请尝试使用该术语。
-
是的,我指出的“时间复杂度”是另一个,尽管它更多的是对需要多少次重复的总结,而不是时间的指示(单个重复可能被严重编码为非常慢! ) - 幸运的是,这听起来像是 OP 正在寻找的。span>
-
@High Performance Mark 时间复杂度是指比较次数。但我的意思是它通过数组的次数,而不是多少次比较或它的时间复杂度。
-
@underscore_d 我想我没有很好地解释自己,所以你无法理解我的意思。我编辑了问题,请查看它。
标签: sorting math dart shellsort