Нет, это зависит от вашего приложения. Меры сортировки часто называют мерами беспорядка , которые представляют собой функции от до , где - это совокупность всех конечных последовательностей различных неотрицательных целых чисел. В обзоре Эстивилла-Кастро и Вуда [1] перечислены и обсуждены 11 различных показателей беспорядка в контексте алгоритмов адаптивной сортировки.N<NRN<N
Количество инверсий может работать в некоторых случаях, но иногда недостаточно. Пример, приведенный в [1], представляет собой последовательность
⟨⌊n/2⌋+1,⌊n/2⌋+2,…,n,1,…,⌊n/2⌋⟩
который имеет квадратичное число инверсий, но состоит только из двух восходящих трасс. Это почти отсортировано, но это не захватывается инверсиями.
[1] Эстивилль-Кастро, Владмир и Дерик Вуд. «Обзор алгоритмов адаптивной сортировки». ACM Computing Surveys (CSUR) 24,4 (1992): 441-476.
Маннила [1] аксиоматизирует предварительную сортировку (с упором на алгоритмы, основанные на сравнении) следующим образом (перефразируя).
Примерами таких мер являются
Обратите внимание, что случайные распределения с использованием этих мер были определены, то есть такие, которые делают последовательности, которые более / менее отсортированы, более или менее вероятно. Они называются Ewens-подобными распределениями [2, гл. 4-5; 3, пример 12; 4], частным случаем которого является так называемое распределение Мальвы . Веса параметрически в константе и выполняютθ>0
Обратите внимание, как определяет равномерное распределение (для всех ).θ=1 m
Поскольку существует возможность выборки перестановок по этим показателям эффективно, этот объем работы может быть полезен на практике при сравнительном анализе алгоритмов сортировки.
источник
У меня есть собственное определение «сортировки» последовательности.
Для любой последовательности [a, b, c,…] мы сравниваем ее с отсортированной последовательностью, содержащей одинаковые элементы, подсчитываем количество совпадений и делим ее на количество элементов в последовательности.
Например, для данной последовательности
[5,1,2,3,4]
мы действуем следующим образом:1) отсортировать последовательность:
[1,2,3,4,5]
2) сравнить отсортированную последовательность с оригиналом, переместив ее на одну позицию за раз и посчитав максимальное количество совпадений:
3) Максимальное количество совпадений равно 4, мы можем рассчитать «сортировку» как 4/5 = 0,8.
Сортировка отсортированной последовательности будет 1, а сортировка последовательности с элементами, расположенными в обратном порядке, будет 1 / n.
Идея этого определения заключается в том, чтобы оценить минимальный объем работы, который нам потребуется для преобразования любой последовательности в отсортированную последовательность. В приведенном выше примере нам нужно переместить только один элемент, 5 (есть много способов, но перемещение 5 является наиболее эффективным). Когда элементы будут расположены в обратном порядке, нам нужно будет переместить 4 элемента. И когда последовательность была отсортирована, никакой работы не требуется.
Я надеюсь, что мое определение имеет смысл.
источник
Если вам нужно что-то быстрое и грязное (знаки суммирования меня пугают), я написал супер-легкую функцию беспорядка в C ++ для класса с именем Array, который генерирует массивы int, заполненные случайно сгенерированными числами:
Функция просто сравнивает значение в каждом элементе с индексом элемента + 1, так что массив в обратном порядке имеет значение беспорядка 1, а отсортированный массив имеет значение беспорядка 0. Не сложно, но работает.
Майкл
источник