利用派生类实现统一接口解决三种基础排序问题
编程题:
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;
}
利用派生类实现统一接口解决三种基础排序问题相关推荐
- 006_JDK的Number派生类对Comparable接口的实现
1. JDK1.8的Integer类对Comparable接口的实现 2. JDK1.8的Float类对Comparable接口的实现 3. JDK1.8的Double类对Comparable接口的实 ...
- 利用Applet类和Runnable接口实现滚动字幕
利用Applet类和Runnable接口实现滚动字幕,其中字幕文字("学好java")和时间间隔("200")需要由页面文件中标记的子标记传递. package ...
- C#利用WCF改进文件流传输的三种方式
摘要:本文介绍C#利用WCF改进文件流传输的三种方式:MTOM模型.基于同步传输的异步回调模型.基于异步传输的异步模型,并提供相应的实现代码供参考. - WCF在跨域传输使用了两种模型的方法调用:一种 ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- Java中实现接口的三种方式您造吗?
本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...
- java完全背包,一次性解决三种背包问题
前言 首先,大概讲一下什么是"背包"问题:背包问题是指你有一个容量为V的背包,然后有n个物品在你面前,你要怎么装才能使得背包里的物品总价值最大.而每种物品是只有1个,还是有多个,亦 ...
- 调用第三方接口的三种方式
调用第三方接口到三种方式 链接 Hutool 依赖 <dependency><groupId>cn.hutool</groupId><artifactId&g ...
- html引入外部css_CSS 三种基础选择器
本节我们来学习 CSS 中的选择器,选择器是 CSS 里面一个很重要的概念,HTML 中的所有标签样式,都是通过不同的 CSS 选择器进行控制的.我们只需要通过选择器,就可以对不同的 HTML 标签进 ...
- uniapp怎么引入css_CSS 三种基础选择器
本节我们来学习 CSS 中的选择器,选择器是 CSS 里面一个很重要的概念,HTML 中的所有标签样式,都是通过不同的 CSS 选择器进行控制的.我们只需要通过选择器,就可以对不同的 HTML 标签进 ...
最新文章
- vuex中获取的数据使用v-model绑定出问题
- mysql索引查2遍_mysql索引优化查询
- 简单使用TFS管理源代码
- mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
- C++17新特性之std::string_view
- Android之蓝牙开发浅析
- python数组写入txt
- spring boot服务部署后访问zul页面404
- RestClient的简单介绍
- 如何在统信UOS系统中设置tomcat开机启动
- 图像生成 - 使用BigGAN在Imagenet数据集上生成高质量图像。
- 租服务器一年多少钱,阿里云服务器租赁一年多少钱...
- SAP中五个报废率的计算逻辑
- python按键持续按下响应_python按键按住不放持续响应的实例代码
- matlab怎么画probit,matlab对于probit模型怎么求统计值(赠probit程序)
- LED产品失效的技术分析指导
- 职高计算机软件应用,[计算机软件及应用]职高Word2003基础教程.ppt
- 线束测试仪工作原理是什么,使用方法介绍
- html弹力球游戏源码,Flash游戏制作:弹力球
- Google浏览器搜索技巧(提高效率)