我有一個包含大約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,你可以使用二進制搜索 – 2015-02-09 11:06:47
使用STL [containers](http://en.cppreference.com/w/cpp/container),就像[std :: map](http://en.cppreference)。 COM /瓦特/ CPP /容器/地圖)。如果您無法使用它們,請閱讀[平衡搜索樹](http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)並使用[二進制搜索](http://en.wikipedia.org/wiki/Binary_search_algorithm) – 2015-02-09 11:08:31
爲什麼不使用'std :: sort()'? – sashoalm 2015-02-09 11:43:42