我指的是原始(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()]),
[...]