排序算法

来源:互联网 发布:自己设计头像软件 编辑:程序博客网 时间:2024/06/07 11:48
vector<string> vec1, vec2;void selectSort(int l, int r){for (int i = l;i <= r;i++){auto min = vec1[i];int index = i;for (int s = i;s <= r;s++){if (cmp(vec1[s], min)){min = vec1[s];index = s;}}swap(vec1[i], vec1[index]);}}void insertSort(int l, int r){for (int i = l + 1;i <= r;i++){auto v = vec1[i];int index = i - 1;for (;index >= l;index--){if (cmp(vec1[index], v))break;}index++;for (int j = i;j > index;j--){swap(vec1[j], vec1[j - 1]);}vec1[index] = v;}}void qsort(int l, int r){if (r <= l)return;int rnum = rand() % (r - l + 1) + l;int lpos = l, rpos = r;auto m = vec1[rnum];swap(vec1[l], vec1[rnum]);lpos++;while (true){while (lpos < rpos && cmp(m, vec1[rpos]))rpos--;while (lpos < rpos && !cmp(m, vec1[lpos]))lpos++;if (lpos == rpos)break;swap(vec1[lpos], vec1[rpos]);}if (cmp(vec1[lpos], vec1[l]))swap(vec1[lpos], vec1[l]);if (lpos - 1 - l > 8)qsort(l, lpos - 1);elseinsertSort(l, lpos - 1);if (r - lpos > 8)qsort(lpos, r);elseinsertSort(lpos, r);}void randString(vector<string> &vec){int len = rand() % 20 + 1;string n;for (int i = 0;i < len;i++){n.append(1, rand() % ('z' - 'a' + 1) + 'a');}n.append(1,0);vec.push_back(n);}int main(){srand(time(0));int c = 500000;for (int i = 0;i < c;i++){randString(vec1);vec2.push_back(*vec1.rbegin());}cout << "start:" << c << " strings" << endl;auto t1=chrono::system_clock::now();qsort(0, vec1.size() - 1);auto t2 = chrono::system_clock::now();cout <<"my algrithm use time:" << (t2 - t1).count() / (double)chrono::system_clock::period::den << endl;t1 = chrono::system_clock::now();sort(vec2.begin(), vec2.end(), [](string&l,string&r){const char *t1 = l.c_str();const char *t2 = r.c_str();while (*t1 && *t2 && *t1 == *t2){t1++, t2++;}return *t1 < *t2;});t2 = chrono::system_clock::now();cout <<"c++ sort use time:" << (t2 - t1).count() / (double)chrono::system_clock::period::den << endl;for (int i = 0;i < vec1.size();i++){if (vec1[i] != vec2[i]){cout << "error" << endl;break;}}getchar();return 0;}

原创粉丝点击