int getValue(QString text){ return text.remove(QRegExp("[0-9]*-")).toInt();}void qSort(QStringList *list, int minIndex, int maxIndex){ int i = minIndex; int j = maxIndex; // x - опорный элемент посредине между low и high int x = getValue(list->at((minIndex + maxIndex) / 2)); do { while(getValue(list->at(i)) < x) ++i; // поиск элемента для переноса в старшую часть while(getValue(list->at(j)) > x) --j; // поиск элемента для переноса в младшую часть if(i <= j) { // обмен элементов местами: list->swap(i, j); // переход к следующим элементам: i++; j--; } }while(i < j); if(minIndex < j) qSort(list, minIndex, j); if(i < maxIndex) qSort(list, i, maxIndex);}void qSort(QStringList *list){ qSort(list, 0, list->count() - 1);}int main(int argc, char *argv[]){ QApplication a(argc, argv); QStringList list; list << "1004-34" << "1003-11" << "1006-31" << "1005-78" << "1002-25"; qDebug() << list; qSort(&list); qDebug() << list; return a.exec();}
C++ (Qt)#include <iostream>#include <vector>#include <string>#include <algorithm> int toint(const std::string & x) { auto begin = x.find_first_of("-", 0); auto end = x.find_first_not_of("0123456789", ++begin); return std::stoi(x.substr(begin, end-begin));} int main() { std::vector<std::string> stringlist = { "1004-34", "1003-11", "1006-31", "1005-78", "1002-25" }; std::cout << "Before sorting:" << std::endl; for (auto & s : stringlist) { std:: cout << s << std::endl; } std::sort(stringlist.begin(), stringlist.end(), [](const std::string &s1, const std::string &s2) { return toint(s1) < toint(s2); }); std::cout << "After sorting:" << std::endl; for (auto & s : stringlist) { std:: cout << s << std::endl; } return 0;}
int getValue(string text){ string temp; bool flag = false; for(int i = 0; i < text.size(); i++) { if(flag) temp.append(&text[i]); if(text[i] == '-') flag = true; } return atoi(temp.c_str());}void qSort(vector <string> *vect, int minIndex, int maxIndex){ int i = minIndex; int j = maxIndex; // x - опорный элемент посредине между low и high int x = getValue(vect->at( (minIndex + maxIndex) / 2) ); do { while(getValue(vect->at(i)) < x) ++i; // поиск элемента для переноса в старшую часть while(getValue(vect->at(j)) > x) --j; // поиск элемента для переноса в младшую часть if(i <= j) { // обмен элементов местами swap(vect->at(i), vect->at(j)); // переход к следующим элементам: i++; j--; } }while(i < j); if(minIndex < j) qSort(vect, minIndex, j); if(i < maxIndex) qSort(vect, i, maxIndex);}void qSort(vector <string> *vect){ qSort(vect, 0, vect->size() - 1);}int main(int argc, char *argv[]){ vector <string> stringVector; stringVector.push_back("1004-34"); stringVector.push_back("1003-11"); stringVector.push_back("1006-31"); stringVector.push_back("1005-78"); stringVector.push_back("1002-25"); for(int i = 0; i < stringVector.size(); i++) cout << stringVector[i].c_str() << "\n"; qSort(&stringVector); cout << "\n"; for(int i = 0; i < stringVector.size(); i++) cout << stringVector[i].c_str() << "\n"; return 0;}