数据结构实验报告02

一、实验目的和要求

1事先设计比较方案。比较内容要涉及到排序中数据的存储结构、数量、
排序方法、代码之间的时间性能、空间性能等指标( 但不局限于以上指标
)的不同。做出比较方案的预分析结果。
2.改造代码,保证代码比较的公平公正可比性。
3.按比较方案实际运行代码,记录实验结果,和预分析结果做对比,再次
进行分析总结,对存在的问题尝试提出解诀方案。
4.其它要求同作业-01要求。

二、实验环境

Codeblocks  

Dev c++  

三、实验内容

收集至少两位同学的的课后作业-01的代码,做代码比较分析。  

四、实验过程

用文字、图(流程图等)、表格等方式记录实验过程中分析、设计工作。

4.1 任务定义和问题分析

比较内容要涉及到排序中数据的存储结构、数量、排序方法、代码之间的时间性能、空间性能等指标的不同。还要同时考虑硬件软件的要求。

 

五、测试及结果分析

对各种数据运行程序和算法的结果记录和分析,并对错误所作的修改和结果。

5.1 实验数据

自己

数据/时间(s)

初次

整理代码后

最终

100

2.84

2.835

2.835

1000

2.971

2.962

2.962

10,000

/

3.942

3.942

100,000

/

34.271

34.271

1000,000

/

7.485

7.485

他人

数据/时间(s)

1号

2号

3号

100

8/2..981

9/2.981

0/0.5093

1000

87/3.054

90/3.054

0/0.5243

10,000

892/3.329

884/3.329

0/0.5306

100,000

8847/20.664

8801/20.664

0.046

1000,000

8921/20.670

8793/20.670

13.844

注:/前为本身所带时间函数测试结果,/后为统一运行结果

5.2 结果及分析

1,2号是将两种方法包含在一个代码中,所用环境均相同

3号调用了函数,但是同时也简化了程序,没有我的源代码那么复杂

 

1,2号

    

 

 

3号

 

 

 

 

六、实验收获

  辛辛苦苦完成作业01后,作业02无疑给了我更大的打击,在找来别人的代码后,所谓的没有对比就没有伤害,有一种小学生作业与大学生较量的既视感,无论从复杂度还是完美度还是高级度,都是我无法比及的,最简单的排序方法碰上快排,心理落差还是有的,对我的打击也挺大的,但是,打击归打击,作业还是要完成的。作业2的测试环节我进行的也不是很顺利。在要到第一个同学的代码(两种方法的)后,创建class时就出现了问题,由于我设置的头文件名字母没有大写,所以编译器报错未声明函数,在改正后(源代码主人的帮助下),总算是顺利的运行成功了代码!第二份代码运行时,我的编译器报错了很多,(当然,是我的编译器的问题,它经常不好使),原代码主人建议我用Dev试试,首先,我的电脑不知什么原因无法安装,又请别人直接给我发送了安装包,不过安装完成后仍然无法运行,(我的内心是崩溃的,因为搞了一个晚上还是无果),第二天,我又花费了一个下午加一晚上的时间解决问题。现在是凌晨0:30,选择熬夜写完报告,是因为夜深人静的时候,能带给我更多的思考和感悟。意识到了自己的不足,所以才会下定决心去改正。这次的实验内容很好的锻炼了我的耐心,我有足够的耐心去解决所遇到的问题,而不是一味的逃避和抱怨,我想,这是我这次收获到的最有价值的东西。

七、参考文献

八、附录(源代码)

3号

#include <iostream>

#include <fstream>//文件的输入输出

#include <cstdlib>//产生足够多的随机数

#include <ctime>//运用time(0)函数改变种子的值

using namespace std;

clock_t start,end;//计时函数;

void sort(int size,int *p)

{

int i,j;

int temp;

for(i=0;i<size;i++)

{

temp = *(p+j);

for(j=i-1;j>=0;j--)

{

if(*(p+j)>temp)

{

*(p+j+1) = *(p+j);

}

}

*(p+j+1) = temp;

}

}



int main(int argc, char** argv)

{

//确定数据的多少;

int size;

cout<<"Enter the size:"<<endl;

cin>>size;

//向文本中输入数据;

//ofstream output;

//output.open("homework1.txt");

//srand(time(0));//改变种子的值

int i;

//for(i=0;i<size;i++)

//output<<(rand() % 1000000)<<endl;//产生0-999999的size个随机数,并存入文件中;

//output.close();

//从文本中输出数据;

int *p=new int [size];

ifstream input("homework1.txt");

for(i=0;i<size;i++)

input>>*(p+i); //将size个随机数存入数组中;

input.close();

//开始计时;

start = clock();

//排序;

sort(size,p);

end = clock();

double time=(double)(end-start)/CLOCKS_PER_SEC;

cout<<"Time:"<<time<<"s"<<endl;

return 0;

}

1号

实验02.cpp
#include"Function.h"
#include<iostream>
#include"stdlib.h"
#include"time.h"
using namespace std;
int main(){
long double tim1,tim2;
int a=1000000;
int *arr1=new int[a];
int *arr2=new int[a];
srand((unsigned)time(NULL));
for(int j=0;j<a;j++){
arr1[j]=rand();

}
for(int k=0;k<a;k++){
arr2[k]=arr1[k];
}
clock_t start1, finish1,start2,finish2;
start1=clock();
QuickSort(arr1,0,a-1);
cout<<"After QuickSorting:";
for(int i=0;i<a;i++){
cout<<arr1[i]<<" ";
}
finish1=clock();
tim1=finish1-start1;
cout<<endl;
start2=clock();
ShellSort(arr2,a);
cout<<"After ShellSorting:"; 
for(int m=0;m<a;m++){
cout<<arr2[m]<<" ";
}
finish2=clock();
tim2=finish2-start2;
cout<<endl;
cout<<"Quicksorting time="<<tim1<<"seconds"<<endl;
cout<<"Shellsorting time="<<tim2<<"seconds"<<endl;
delete []arr1;
delete []arr2;
return 0;
}
Function.h:
#ifndef FUNCTION_H
#define FUNCTION_H 
#include<iostream>
using namespace std;
void BubbleSort(int arr[],int length){
for(int i=0;i<length;i++){
for(int j=0;j<length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp;
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
void SelectionSort(int arr[],int length){
for(int i=0;i<length; i++){
int index=i;
for(int j=i+1;j<length;j++){
if(arr[j]<arr[index]){
index=j; 
}
}
if(index==i){
continue;
}
else{
int temp;
temp = arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
}
}
void InsertSort(int arr[],int length){
for(int i=1;i<length;i++){
int j;
if(arr[i]<arr[i-1]){
int temp=arr[i];
for(j=i-1;j>=0&&temp<arr[j];j--){
arr[j+1]=arr[j];
}
arr[j+1]=temp;
}
}
}
void ShellSort(int arr[],int length){
int increasement=length;
int i,j,k;
do{
increasement=increasement/3+1;
for(i=0;i<increasement;i++){
for(j=i+increasement;j<length;j+=increasement){
if(arr[j]<arr[j-increasement]){
int temp=arr[j];
for(k=j-increasement;k>=0&&temp<arr[k];k-=increasement){
arr[k+increasement]=arr[k];
}
arr[k+increasement]=temp;
}
}
}
}while(increasement>1);
}
void QuickSort(int arr[],int start,int end){
if(start>=end){
return;
}
int i=start;
int j=end;
int baseval=arr[start];
while(i<j){
while(i<j&&arr[j]>=baseval){
j--;
}
if(i<j){
arr[i]=arr[j];
i++;
}
while(i<j&&arr[i]<baseval){
i++;
}
if(i<j){
arr[j]=arr[i];
j--;
}
}
arr[i]=baseval;
QuickSort(arr,start,i-1);
QuickSort(arr,i+1,end);
}
void MergeSort(int arr[],int start,int end,int *temp){
if(start>=end){
return;
}
    int mid=(start+end)/2;
    MergeSort(arr,start,mid,temp);
    MergeSort(arr,mid+1,end,temp);
    int length=0;
    int i_start=start;
    int i_end=mid;
    int j_start=mid+1;
    int j_end=end;
    while(i_start<=i_end&&j_start<=j_end){
     if(arr[i_start]<arr[j_start]){
     temp[length]=arr[i_start];
     length++;
     i_start++;
}
else{
temp[length]=arr[i_start];
length++;
j_start;
}
}
while(i_start<=i_end){
temp[length]=arr[i_start];
i_start++;
length++;
}
while(j_start<=j_end){
temp[length]=arr[j_start];
length++;
j_start++;
}
for(int i=0;i<length;i++){
arr[start+i]=temp[i];
}
}
    
#endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值