Есть ли способ подсчитать прогресс алгоритма сортировки? - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь сделать субъективную сортировку на основе сортировки по оболочке. Я имею в виду оригинальный алгоритм (алгоритм Дональда Шелла). Я уже сделал все logi c, где он точно такой же, как сортировка оболочки, но вместо того, чтобы компьютер вычислить, что больше, пользователь субъективно определяет, что больше. Но проблема в том, что я хотел бы отобразить процент или что-то, чтобы пользователь знал, как далеко он уже находится в сортировке. Вот почему я хочу найти способ узнать это.

Я попытался спросить здесь ( Какова формула для получения количества проходов при сортировке оболочки? ), но, возможно, я не знал 't express Я хорошо в прошлый раз, и они закрыли вопрос. Сначала я попытался связать прогресс с количеством проходов в массиве в сортировке оболочки. Но в последнее время я заметил, что это не фиксированный номер. Так что, если у вас есть представление о том, как лучше всего отображать прогресс сортировки, я буду очень признателен.

Я сделал эту формулу, отображая ее цветом в зависимости от количества проходов, это самый близкий, который я мог найти, но он не полностью соответствует максимальному диапазону для списка цветов. (Код в 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()]
),
[...]

Это не обязательно должно быть так, как я пытался сделать, поэтому, пожалуйста, если у вас есть идея, как отображать прогресс сортировки, поделитесь ею.

РЕДАКТИРОВАТЬ: Думаю, я нашел ответ !! По крайней мере, для сортировки оболочки она работает на основе числа os, проходящего через массив. Просто измените sqrt (a.length) .ceil () на (log (a.length) / log (2)). Floor () Эта строка:

color: colors[(((pass - 1) * (colors.length - 1)) / (log(a.length) / log(2)).floor()).floor()]),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...