计科《算法设计与分析》第三周作业——冒泡排序和归并排序
2014-04-01 00:24
246 查看
冒泡排序:
归并排序:
由此结果可以看出两种排序算法的效率是有很大的区别的~~~
#include <iostream> #include <fstream> #include <vector> #include <ctime> using namespace std; bool bubbleSort(char* inFileName,char* outFileName) { ifstream inFile(inFileName);//打开输入文件 ofstream outFile(outFileName);//打开并清空文件 if(!inFile || !outFile) { cout<<"文件读取失败!"<<endl; outFile.close(); inFile.close(); return false; } int temp = 0; vector<int> vInt; while(inFile>>temp) { vInt.push_back(temp); } vector<int>::iterator beg = vInt.begin() ,iter_i ,iter_j; //冒泡开始 for(iter_i = beg;iter_i != vInt.end();++iter_i) { for(iter_j = iter_i + 1;iter_j != vInt.end();++iter_j) { if( (*iter_i) > (*iter_j) ) { temp = *iter_j; *iter_j = *iter_i; *iter_i = temp; } } } for(iter_i = beg;iter_i != vInt.end();++iter_i) { outFile<<*iter_i<<endl; } outFile.close(); inFile.close(); return true; } int main(int argc,char* argv[]) { if( argc != 3 ) { cout<<"输入有误!"<<endl; return -1; } clock_t start_time,end_time; double totaltime; start_time = clock();//计时开始 bubbleSort(argv[1] ,argv[2]);//调用冒泡排序 end_time = clock();//计时结束 totaltime=(double)(end_time-start_time)/CLOCKS_PER_SEC; cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl; return 0; }
归并排序:
#include <iostream> #include <fstream> #include <vector> #include <ctime> using namespace std; /** mSort函数 * vInt 是需要排序的容器的引用 * p 是容器的首端 * m 是容器的中心位置 * q 是容器的末端的下一位 **/ void mSort(vector<int> &vInt , vector<int>::iterator p , vector<int>::iterator m , vector<int>::iterator q) { //定义需要用到的临时变量 vector<int> first(p,m),second(m,q) ,ret; vector<int>::iterator iter_f = first.begin(),iter_s = second.begin(); //循环比较两个临时容器中数据的大小,并按照从小到大的顺序排好序 while(iter_f!=first.end() && iter_s!=second.end()) { if(*iter_f>*iter_s) { ret.push_back(*iter_s); ++iter_s; } else { ret.push_back(*iter_f); ++iter_f; } } //检查是否还有剩余的数据没有读取 if(iter_f == first.end()) { while(iter_s != second.end()) { ret.push_back(*iter_s++); } } if(iter_s == second.end()) { while(iter_f != first.end()) { ret.push_back(*iter_f++); } } //把已经排好序的数据放回原来的容器 for(vector<int>::iterator iter_ret = ret.begin();iter_ret != ret.end();++iter_ret,++p) { *p = *iter_ret; } } /** merge函数 * vInt 是需要排序的容器的引用 * p 是容器的首端 * q 是容器的末端的下一位 **/ void merge(vector<int> &vInt , vector<int>::iterator p , vector<int>::iterator q) { if (vInt.size() > 1)//当容器中存在多于一个元素时进行排序 { //定义需要用到的临时变量 vector<int>::iterator iter_ret,iter_temp; vector<int>::iterator m = vInt.begin() + vInt.size()/2; //在下标位m处把容器分开两部分 vector<int> vInt1(p,m), vInt2(m,q); //vInt1进行排序,结果放回vInt merge(vInt1,vInt1.begin(),vInt1.end()); for(iter_ret = vInt1.begin(),iter_temp = p;iter_ret != vInt1.end();++iter_ret,++iter_temp) { *iter_temp = *iter_ret; } //vInt2进行排序,结果放回vInt merge(vInt2,vInt2.begin(),vInt2.end()); for(iter_ret = vInt2.begin(),iter_temp = m;iter_ret != vInt2.end();++iter_ret,++iter_temp) { *iter_temp = *iter_ret; } //vInt进行合并排序 mSort(vInt,p,m,q); } } /** mergeSort函数 * inFileName 是读取数据的文件名,需要进行排序的数据 * outFileName 是写入数据的文件名,保存排好序的数据 **/ bool mergeSort(char* inFileName,char* outFileName) { ifstream inFile(inFileName);//打开输入文件 ofstream outFile(outFileName);//打开并清空文件 if(!inFile || !outFile) { cout<<"文件读取失败!"<<endl; outFile.close(); inFile.close(); return false; } int temp = 0; vector<int> vInt; //读取inFileName文件,把数据放在容器vInt中 while(inFile>>temp) { vInt.push_back(temp); } //开始排序 merge(vInt,vInt.begin(),vInt.end()); //把排好序的数据写入outFileName文件中 for(vector<int>::iterator iter = vInt.begin() ;iter != vInt.end() ;++iter) { outFile<<*iter<<endl; } outFile.close(); inFile.close(); return true; } int main(int argc,char* argv[]) { if( argc != 3 ) { cout<<"输入有误!请按照以下格式输入指令:"; cout<<"\"./mergeSort 需要排序的文件名 保存排序结果的文件名\""<<endl; cout<<"例:\n./mergeSort largeW.txt largeW_merge.txt"<<endl; return -1; } clock_t start_time,end_time; double totaltime; start_time = clock();//记录开始时间 //调用归并排序 if(!mergeSort(argv[1] ,argv[2])) { cout<<"排序失败!"<<endl; return -1; }else{ cout<<"排序成功!"<<endl; end_time = clock();//记录结束时间 totaltime=(double)(end_time-start_time)/CLOCKS_PER_SEC; cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl; } return 0; }
由此结果可以看出两种排序算法的效率是有很大的区别的~~~
相关文章推荐
- 第三周作业——冒泡排序和归并排序(计科1113练思安)
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业:冒泡排序与归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业-冒泡排序与归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 第三周----作业冒泡排序与归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业--冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序