标签:vector clock int ++ 哈工大 QuickSort1 swap 2022 排序
#pragma comment(linker,"/STACK:1024000000,1024000000") #include <bits/stdc++.h> using namespace std; const int maxn = 1e6; int Rand_Partition(vector<int> &A, int &p,int &r) { // 随机生成锚点下标 int i = rand() % (r - p) + p; swap(A[r], A[i]); int x = A[r]; i = p - 1; for(int j = p; j < r; j++) { // A[j] < x时交换到前面,保证i + 1前面的都是小于x的 if(A[j] < x) { i++; swap(A[i], A[j]); } } // 将x放到i + 1的位置 swap(A[i + 1], A[r]); return i + 1; } // 只能保证小于的在左边,右边的为大于和等于的乱序 // 以q为划分边界,重复的元素也会处理 void QuickSort1(vector<int> &A, int p, int r) { if(p < r) { int q = Rand_Partition(A, p, r); QuickSort1(A, p, q - 1); QuickSort1(A, q + 1, r); } } // 算法保证了与锚点相同的在中间,小于的在左边,大于的在右边 void QuickSort2(vector<int>& A, int l, int r) { if(l >= r) return; int p = l, q = r; int i = rand() % (r - l) + l; int x = A[i]; i = l; // 小于q,因为q后边的都是大于x的 while(i <= q) { if(A[i] == x) { i++; continue; } else if(A[i] < x) swap(A[i++], A[p++]); // 因为前面的元素已经遍历过了,位置p之前一定是==x的元素,因此直接i++即可 // 而后边换过来的元素并不知道其大小,因此i不变 else swap(A[i], A[q--]); } // 注意划分区域,中间相同的不再处理 QuickSort2(A, l, p - 1); QuickSort2(A, q + 1, r); } void DataGenerate(vector<int> &A, int k) { A.clear(); srand(time(0)); int m = 1e5 * k; for(int i = 0; i < maxn; i++) { if(i < m) A.push_back(7); else A.push_back(i); } random_shuffle(A.begin(), A.end()); } vector<int> A; int main() { int n; for(int i = 0; i < 11; i++) { DataGenerate(A, i); clock_t startTime, endTime; startTime = clock(); // QuickSort1(A, 0, A.size() - 1); // sort(A.begin(), A.end()); QuickSort2(A, 0, A.size() - 1); endTime = clock(); cout << "the "<< i << "st sort which has "<< 1e5 * i << " repeat nums needs " << endTime - startTime << " ms" << endl; } return 0; }
标签:vector,clock,int,++,哈工大,QuickSort1,swap,2022,排序 来源: https://www.cnblogs.com/WTSRUVF/p/16350522.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。