第一次做的算法的实验报告,其实也很简单,就使分析堆排序 快排 和冒泡排序的算法。测试了一大堆数据,但是还是觉得不是很好,居然快排在数据达到10000的时候程序就不动了。我郁闷死了。检查了半天还是没有找到为什么。。时间来不及了也就将就了。不过我还是诚实的,没有测出数据来就直接给老师说我没有测出来。具体的原因需要继续研究。
在程序中遇到的问题主要是计算程序运行时间所用的函数。网上一查,哇塞好多答案哦。个说个有理。不过后来还是采用了c下的clock() 来计算,但是牵扯到精确度,用自己的pc机测试的确很不精确,我开着或者不开千千静听。同时测试程序,时间都有几十毫秒的差别。都在强cpu啊。
这次试验也学会了用excle做曲线了,本来是叫你一个巴基斯坦人帮我用matlab描图的,但是没有找到他,还是自己动手做好,在网上逛了半天,说得也清楚,所以这里我把具体的步骤说出来,希望对大家有所帮助,既然excel能生成曲线图,为什么要用matlab那么大的软件嘛。具体步骤如下:
1 打开excle,当然现在你可以吧数据(横纵坐标,当然也可以包括多个曲线的图的数据)复制到里面。
2 点击插入图表,选择自己要图表的样式,是bar的还是curve的,一般曲线的就选择x y 离散点那个。再选择具体的样式,步骤上面都有
3 下一步就是数据区域,其实它会自动搜索你excel里的数据,但是你也可以改变。系列产生在 x y 看你的数据怎么分布的吧,你自己选择不同的试一下是不是自己需要的。
4 和数据区域并行的是系列,系列就是你这个坐标里面包含的多条曲线,如果只有一个则就只有一个系列,一个系列是一条曲线,你可以选择系列几,跟它取名字,和选择数据(x y)的数据域分别是那些,你只需要点击x y 后面那个像日历的东西 弹出个框框,你再在excel中选择自己的x y 数据就可以。。再设置系列2,系列3等不同曲线的信息。
我之前觉得很难,看别人写的也没有看懂,还是自己琢磨出来的呢哈哈。这次的报告写了15页,都是英文的,其实我觉得写得很垃圾啊,国内的同学还硬要给我他看哈,唉,多不好意思的,下次的那个实验要要写好点,免得给他们看的时候还有语法错误,丢我的脸啊。这里顺便也把代码贴出来,虽然有些是我借鉴别人的,但是也有自己的东西哇哈哈。
bubble sort :是可以直接运行的
#include <stdlib.h>
#include <iostream.h>
#include<time.h>
int main()
{
const int sum=100000;
int array[sum],temp;
clock_t begin, finish;
double duration;
for(int i=0;i<sum;i++)
array[i]=sum-i;//rand()%sum;
begin=clock();
for(int j=0;j<sum;j++)
for(int k=0;k<sum-1-j;k++)
{
if(array[k]>array[k+1])
{
temp=array[k];
array[k]=array[k+1];
array[k+1]=temp;
}
}
finish=clock();
duration= (double)(finish-begin);
cout<<"the integers are sorted as follows:"<<endl;
for(int n=0;n<sum;n++)
cout<<array[n]<<endl;
cout<<"begin is:"<<begin<<endl;
cout<<"finish is:"<<finish<<endl;
cout<<"this inputs cost:"<<duration<<endl;
return 0;
}
quick sort:也是可以运行的
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define size 10000
void Swap(int& a, int& b)
{
int c = 0;
c = a;
a = b;
b = c;
}
void disp(int a[],int n)
{
for(int i=0; i<n;i++)
printf("%d ",a[i]);
}
int partion(int a[],int L,int r)
{
int i = L-1,j=r;
int v = a[r];
while(1)
{
while(a[++i] < v);
while(v < a[--j])
if(j==L)
break;
if(i>=j)
break;
Swap(a[i],a[j]);
}&n