实验报告总结

三种排序算法实现及性能分析
这篇实验报告详细记录了作者在分析和实现堆排序、快速排序和冒泡排序过程中遇到的问题和解决方案。通过使用C语言编程,并利用Excel进行数据可视化,作者展示了算法的运行时间和性能。尽管在测试过程中遇到快排在大量数据下无法运行的问题,但作者使用了clock()函数来计算程序运行时间。报告还提供了如何使用Excel生成曲线图的步骤,以及每个排序算法的完整代码示例。

    第一次做的算法的实验报告,其实也很简单,就使分析堆排序 快排 和冒泡排序的算法。测试了一大堆数据,但是还是觉得不是很好,居然快排在数据达到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值