算法导论CLRS 7.3 随机版快速排序
2012-10-23 18:54
267 查看
/*7.3 随机化快速排序 *QUICK-SORT */ #include<iostream> #include<iomanip> #include<vector> #include<ctime> using namespace std; typedef vector<int>::iterator ivecIte; size_t chkivIte(ivecIte iteB, ivecIte iteE) { if(iteE < iteB) { cout<<"wrong in iterator range!"<<endl; exit(0); } return iteE - iteB; } ivecIte partition(vector<int> &ivec, ivecIte iteB, ivecIte iteE) { chkivIte(iteB, iteE); //ite1指向大于*(iteE-1)队列的最左边的元素 ivecIte ite1 = iteB, ite2; for(ite2 = iteB; iteE-1 != ite2; ++ite2) { if( *ite2 < *(iteE-1)) { if( ite1!= ite2) {//ite1与ite2指向相同时不能使用^ *ite1 = *ite1 ^ *ite2; *ite2 = *ite1 ^ *ite2; *ite1 = *ite1 ^ *ite2; } ++ite1; } } //如果ite为iteE-1,说明iteE-1指向最大值,要将其排出 //而且两者相等时不能用^ if(ite1 != iteE-1) { *ite1 = *ite1 ^ *(iteE - 1); *(iteE - 1) = *ite1 ^ *(iteE - 1); *ite1++ = *ite1 ^ *(iteE - 1); } return ite1; } ivecIte rndPartition(vector<int> &ivec, ivecIte iteB, ivecIte iteE) { srand((unsigned)time(NULL)); ivecIte iteRnd = iteB + rand() % (iteE-iteB); if(iteRnd != iteE-1) { *iteRnd = *iteRnd ^ *(iteE - 1); *(iteE-1) = *iteRnd ^ *(iteE - 1); *iteRnd = *iteRnd ^ *(iteE - 1); } return partition(ivec, iteB, iteE); } void rndQuickSort(vector<int> &ivec, ivecIte iteB, ivecIte iteE) { if(1 < iteE-iteB) { ivecIte iteP = rndPartition(ivec, iteB, iteE); rndQuickSort(ivec, iteB, iteP); rndQuickSort(ivec, iteP, iteE); } } int main() { vector<int> ivec; int inData; cout<<"input some integers with end-of-file!"<<endl; while(cin>>inData) ivec.push_back(inData); rndQuickSort(ivec, ivec.begin(), ivec.end()); for(ivecIte ite = ivec.begin(); ivec.end() != ite; ++ite) cout<<setw(5)<<*ite; cout<<endl; system("PAUSE"); return EXIT_SUCCESS; }
相关文章推荐
- 【CLRS】《算法导论》读书笔记(二):快速排序(Quicksort)
- 《算法导论》提供的快速排序时而输入数据有序时的化解方法(5分法取中位数)
- 算法导论-排序-快速排序
- 《算法导论》笔记 第7章 7.4快速排序分析
- 算法导论学习随笔——第七章 快速排序
- 算法导论(CLRS, 2nd) 个人答案 3.2
- 《算法导论》8、快速排序实现(C++)
- 算法导论(三) 快速排序
- 《算法导论》CLRS算法C++实现(四)P85 快速排序
- 算法导论 CLRS 22.1-4 解答
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 算法导论学习笔记(一)排序算法之快速排序
- 算法导论第七章 -- 快速排序
- 算法导论上的快速排序
- 算法导论(CLRS, 2nd) 个人答案 Ch6.1
- 算法导论-快速排序
- 算法导论 CLRS 17.3-5 解答
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 算法导论(CLRS)6.3-2
- 算法导论——快速排序(Quick-Sort)