利用派生类实现统一接口解决三种基础排序问题
生活随笔
收集整理的這篇文章主要介紹了
利用派生类实现统一接口解决三种基础排序问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編程題:
1.算法:派生類解決三個排序(冒泡,插入,選擇)
2.一個基類:整形數組,數據隨機產生(不能重復)
3.調用的時候給出統一的sort接口
三個派生類解決不同算法
每一個結果要輸出到文件里
每個數組初始狀態,排序后的狀態
輸出算法效率;(最低要求輸出時間間隔,比如說在哪段效率高)
對于效率統計:每一個數據單元所用的時間(效率)
效率是否隨數據成員呈現線性變化
代碼:
#include <iostream> #include<stdlib.h> #include<time.h> #include<fstream> #include<iomanip> #define N 10000 using namespace std;class Base { public:double time;int aa[N];//數組virtual void sort(){}//虛函數統一接口virtual void funout(){}//輸出數組virtual int fout(){return 0;}//輸出數組到文件virtual int ffout(){return 0;}//輸出程序運行時間到文件Base()//隨機生成不重復整數{for(int j=0;j<N;j++){//srand(time(0));aa[j]=rand()%10000+1;while(1){int flag=1;for(int i=j-1;i>=0;i--){if(aa[j]==aa[i]){//srand(time(0));aa[j]=rand()%10000+1;flag++;}}if(flag==1)break;}}} }; class Bubble:public Base { public:void sort()//冒泡排序{clock_t start,finish;start=clock();for(int i=0;i<N;i++)for(int j=0;j<N-1;j++){if(aa[j]<aa[j+1]){int temp=aa[j];aa[j]=aa[j+1];aa[j+1]=temp;}}finish=clock();time=(double)(finish-start)/CLOCKS_PER_SEC;}void funout()//輸出數組{for(int i=0;i<N;i++){cout<<aa[i]<<'\t';}}int fout(){ofstream outFile("d:\\Bubble1.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}for (int i=0;i<N;i++){outFile<<endl;outFile<<setw(10)<<aa[i];}return 0;}int ffout(){ofstream outFile("d:\\Bubble2.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}outFile<<endl<<time<<"(s)"<<endl;return 0;} }; class Insertion:public Base { public:void sort()//插入排序{clock_t start,finish;start=clock();for(int i=0;i<N;i++){int t=aa[i];for(int j=i-1;j>=0&&t>aa[j];j--){aa[j+1]=aa[j];aa[j]=t;}}finish=clock();time=(double)(finish-start)/CLOCKS_PER_SEC;}void funout()//輸出數組{for(int i=0;i<N;i++){cout<<aa[i]<<'\t';}}int fout(){ofstream outFile("d:\\Insertion1.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}for (int i=0;i<N;i++){outFile<<endl;outFile<<setw(10)<<aa[i];}return 0;}int ffout(){ofstream outFile("d:\\Insertion2.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}outFile<<endl<<time<<"(s)"<<endl;return 0;} }; class Selection:public Base { public:void sort()//選擇排序{clock_t start,finish;start=clock();int i,j,k,temp;for(i=0;i<N;i++){k=i;for(j=i+1;j<N;j++)if(aa[i]<aa[k])k=j;temp=aa[k];aa[k]=aa[i];aa[i]=temp;}finish=clock();time=(double)(finish-start)/CLOCKS_PER_SEC;}void funout()//輸出數組{for(int i=0;i<N;i++){cout<<aa[i]<<'\t';}}int fout(){ofstream outFile("d:\\Selection1.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}for (int i=0;i<N;i++){outFile<<endl;outFile<<setw(10)<<aa[i];}cout<<endl<<endl;return 0;}int ffout(){ofstream outFile("d:\\Selection2.txt",ios::out|ios::app);//輸出結果到文件里if(!outFile){cerr<<"error: unable to open file!";return 1;}outFile<<endl<<time<<"(s)"<<endl;return 0;} }; int main() {Bubble a;a.fout();a.sort();a.fout();a.ffout();Insertion b;b.fout();b.sort();b.fout();b.ffout();Selection c;c.fout();c.sort();c.fout();c.ffout();return 0; }?
總結
以上是生活随笔為你收集整理的利用派生类实现统一接口解决三种基础排序问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy抓取起点中文网排行榜
- 下一篇: 团队和做的直观图_直观,可靠的日期和时间