第2次实验——算法基本功 与 综合思考

来源:互联网 发布:centos 指定ip 编辑:程序博客网 时间:2024/05/29 05:06

(1)算法基本功——快速排序

    对文件 largeW.txt(下载链接)中的数据,应用快速排序算法进行排序,并与冒泡排序、归并排序进行时间比较。体验算法复杂度对设计算法的影响。

代码如下:

#include <iostream>#include <fstream>#include <ctime> using namespace std;#define SIZEOFARRAY 1000000void exchange(int &a,int &b);int partition(int A[] , int p,int r);void QuickSort(int A[] , int p,int r);int main (){ifstream inFile("largeW.txt");ofstream outFile("largeW_QuickSort.txt");if(!inFile || !outFile){cout<<"读取或写入文件失败!"<<endl;inFile.close();outFile.close();return -1;}int *arrayToSort = new int[SIZEOFARRAY];int count = 0;while( !inFile.eof())  inFile>>arrayToSort[count++];clock_t start_time,end_time;  double totaltime;  start_time = clock();//记录开始时间QuickSort(arrayToSort ,0 ,SIZEOFARRAY-1);for (int i = 0; i != SIZEOFARRAY ;++i)outFile << arrayToSort[i] << endl;end_time = clock();//记录结束时间  totaltime=(double)(end_time-start_time)/CLOCKS_PER_SEC;  cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl;  inFile.close();outFile.close();delete [] arrayToSort;return 0;}void exchange(int &a,int &b){int temp = a;a=b;b=temp;}int partition(int A[] , int p,int r){int x = A[r];int i = p-1;for (int j = p;j != r ;++j){if(A[j] <= x){i += 1;exchange(A[i],A[j]);}}exchange(A[i+1],A[r]);return i+1;}void QuickSort(int A[] , int p,int r){int q = 0;if(p<r){q=partition( A ,p ,r );QuickSort(A ,p ,q-1);QuickSort(A ,q+1 ,r);}}

结果如下:


对比前面的冒泡排序以及归并排序:

冒泡排序:


归并排序:


可以看出来快速排序(O(nlogn))与归并排序(O(nlogn))的效率相差不多,也同时比冒泡排序(O(n2))的效率要高很多!

0 0