У меня есть база данных с примерно 200 000 наименований, которая сортируется по имени пользователя. Теперь, когда я добавляю элемент в конец массива и вызываю функцию быстрой сортировки для сортировки этого массива, для сортировки занимает около секунды, что неприемлемо. Конечно, есть определенные оптимизации, которые можно сделать. Например, если я последовательно сравниваю каждую строку с n-1 на 0, а затем перемещаю элементы, соответственно производительность намного больше.C++ - Самый быстрый способ добавить элемент в отсортированный массив
Другая идея заключается в том, что я мог бы выполнять двоичный поиск от 0 до n-1, ну не искажать поиск, но что-то похожее на использование моего уже отсортированного массива. Однако мне не удалось написать правильную функцию, которая вернет индекс, в который будет помещен мой новый элемент.
void quick_sort(int left, int right)
{
int i = left, j = right;
if (left >= right) return;
char pivotC[128];
DataEntry *tmp;
strcpy_a(pivotC, sizeof pivotC, User[(left + right)/2]->username);
while (i <= j)
{
while (StringCompare(User[i]->username, pivotC))
i++;
while (StringCompare(pivotC, User[j]->username))
j--;
if (i <= j)
{
tmp = User[i];
User[i] = User[j];
User[j] = tmp;
i++;
j--;
}
}
if (left < j)
quick_sort(left, j);
if (i < right)
quick_sort(i, right);
}
Любая помощь будет принята с благодарностью.
yup, вы можете использовать бинарный поиск –
Используйте STL [контейнеры] (http://en.cppreference.com/w/cpp/container), например [std :: map] (http: //en.cppreference. ком/ж/CPP/контейнер/карта). Если вы не можете их использовать, прочитайте о [сбалансированных деревьях поиска] (http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) и используйте [бинарный поиск] (http://en.wikipedia.org/wiki/Binary_search_algorithm) –
Почему вы не используете 'std :: sort()'? – sashoalm