我的代碼有問題。我傳入一串字符串(名稱),我想快速排序並按字母順序排序。然後,我想要做的是用我的年齡和年齡排列,將這些值分別與在我的名字數組中交換的值交換。但是,我在嘗試執行該操作時遇到了問題。Quicksort字符串向量按字母順序排列
在主函數中,我通過在:
quicksort(names, names[0], names[names.size() - 1]);
並在代碼中包含
void quicksort(vector<string> &names, string min, string max){
cout << "\n\tSorting names...\n";
int temp = 0,
i = 0;
string lowMin = max,
lowMax = min,
highMin = max,
highMax = min,
pivot;
vector<string> below,
above;
if (min != max){
pivot = (max[i] + min[i])/2;
while (temp < names.size()){
if (names[temp] <= pivot){
if (lowMax.compare(names[temp]) < 0){
lowMax = names[temp];
}
if (lowMin.compare(names[temp]) > 0){
lowMin = names[temp];
}
below.push_back(names[temp]);
}
else {
if (highMax.compare(names[temp]) < 0){
highMax = names[temp];
}
if (highMin.compare(names[temp]) > 0){
highMin = names[temp];
}
above.push_back(names[temp]);
}
temp++;
}
if ((below.size() > 1) && (names.size() != below.size())){
quicksort(below, lowMin, lowMax);
}
if ((above.size() > 1) && (names.size() != above.size())){
quicksort(above, highMin, highMax);
}
for (size_t i = 0; i < below.size(); i++){
names[i] = below[i];
}
for (size_t i = below.size(); i < names.size(); i++){
names[i] = above[i - below.size()];
}
}
} // // End quicksort()
在這種情況下,這將是更好地使交換功能和兩個整數發送所以我可以在我的其他矢量數組中交換值?例如,我在想swapValue(int i, int j){ /* do something */}
另外,有人可以向我解釋foobar[i].swap(foobar[j])
和swap(foobar[i], foobar[j])
之間的區別嗎?這些方法比創建臨時變量和交換值更高效嗎?
如果你想把所有三個相關的值放在一個結構體/類中,並創建一個對象的向量,一個簡單的std :: sort調用就足夠了,而不是寫出整個算法...... – deviantfan
即使你想實現quicksort,你可以使用其他STL算法函數來實現 - http://stackoverflow.com/questions/24650626/how-to-implement-classic-sorting-algorithms-in-modern-c – PaulMcKenzie