Мы подсчитываем количество чтений и записей элемента массива. Чтобы выполнить пузырьковую сортировку, вам нужно обращений (начальная запись до конца, затем, в худшем случае, два чтения и две записи для выполнения перестановок). Чтобы выполнить бинарный поиск, нам нужно ( для бинарного поиска, затем, в худшем случае, чтобы сместить элементы массива вправо, затем 1, чтобы записать элемент массива в его правильное положение).n 2 log n + 2 n + 1 2 log n 2 n1 + 4 нN2 журналаn + 2 n + 12 журналаN2 н
Таким образом, оба метода имеют одинаковую сложность для реализаций массива, но метод двоичного поиска требует меньше обращений к массиву в долгосрочной перспективе ... асимптотически, вдвое меньше. Естественно, есть и другие факторы.
На самом деле, вы могли бы использовать более совершенные реализации и считать только фактические обращения к массиву (не доступы к элементу, который нужно вставить). Вы можете сделать для пузырьковой сортировки и для бинарного поиска ... так что если доступ к регистру / кешу дешев, а доступ к массиву дорог, поиск с конца и смещение по пути (умный пузырь сортировка для вставки) может быть лучше, но не асимптотически.log n + 2 n + 12 н + 1журналn + 2 n + 1
Лучшее решение может включать использование другой структуры данных. Массивы дают вам O (1) доступ (произвольный доступ), но вставки и удаления могут стоить. Хэш-таблица может иметь O (1) вставок и удалений, доступ будет стоить. Другие варианты включают в себя BST и кучи и т. Д. Возможно, стоит рассмотреть потребности вашего приложения в вставке, удалении и доступе, а также выбрать более специализированную структуру.
Также обратите внимание, что если вы хотите добавить элементов в отсортированный массив из n элементов, хорошей идеей может быть эффективная сортировка m элементов, а затем объединение двух массивов; Кроме того, отсортированные массивы могут быть эффективно построены с использованием, например, куч (сортировка кучи).мNм