I'm trying to make a subjective sort based on shell sort. I'm referring to the original (Donald Shell's) algorithm. I already made all the logic, where it is exactly the same as the shell sort, but instead of the computer calculate what is greater, the user determines subjectively what is greater. But the problem is that I would like to display a percentage or something to the user know how far in the sorting it is already. That's why I want to find a way to know it.
I tried asking here(What is the formula to get the number of passes in a shell sort?), but maybe I didn't express myself well last time and they closed the question. I tried first associating the progress with the number of passes in the array in the shell sort. But lately, I noticed it is not a fixed number. So if you have an idea of how it is the best way to display the progress of the sorting, I will really appreciate it.
I did this formula displaying it by color based on the number of passes, it is the closest I could get, but it doesn't match perfectly the maximum range for the color list. (Code in 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()] ), [...]
It doesn't need to be this way I tried to do, so please if you have an idea how to display the progress of the sorting please share it.
EDIT: I think I found the answer!! At least for shell sort, it is working based on the number os passes through the array. Just changing the sqrt(a.length).ceil() with (log(a.length) / log(2)).floor() This line:
color: colors[(((pass - 1) * (colors.length - 1)) / (log(a.length) / log(2)).floor()).floor()]),
User contributions licensed under CC BY-SA 3.0