一、实验目的和要求
要求:
1.按照群文件中的报告内容,首先进行设计工作并加以文字记录,然后编写代码,测试,分析,再二次完善报告,形成完整的文字记录。
2.再次强调,报告中主要以文字、图表的方式,进行工作记录,不准直接扔代码进去!源代码代码作为附录放在文档的最后一项。
3.报告中,要求,对代码运行结果尽量截屏贴图,以示是代码能够成功运行
4.报告中,建议总结部分,尽可能认真总结。
5.不要怕写报告麻烦
二、实验环境
Codeblocks
- 实验内容
01.完成尽可能多的数据排序,并显示运行时间。
四、实验过程
4.1 任务定义和问题分析
4.2 数据结构的选择和概要设计
4.3 详细设计
五、测试及结果分析
对各种数据运行程序和算法的结果记录和分析,并对错误所作的修改和结果。
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 |
5.2 结果及分析
1.最初找到的时间函数特别复杂,需要创建类之类的,增大了我的理解难度。于是更换了许多次,找到了较为简单的一种方法。
- 从100-1000测试的时候,发现代码有点混乱,稍加整理后,程序运行时间加快了。如图
3.100,000时运行也很正常
4.1000,000时程序崩了,我尝试换了编译器,在visual studio上扩大了栈,在Dev上尝试运行,均失败。求助后,在好友的电脑上测试出1000,000 7.485sd的结果。
六、实验收获
这次实验,可以用跌宕起伏来形容。从最开始在课上敲冒泡排序的代码开始,漫长的寒假让我遗忘了很多知识,甚至于冒泡排序都是磕磕绊绊的敲出来的。在知道这次课后作业后,我还是选择了用冒泡排序作为排序方法,并寻求一种最为简洁易懂的方式完成要求。这次作业迫使我接触了很多之前没有了解的东西,比如:随机数和时间函数。随机数,只是之前看别人使用过,而在我的编译器中,它是第一次出现的。而寻找时间函数的代码更是“跌宕起伏”,最开始搜到的代码全是非常高级的表达,有class,有指针,有多个函数的调用,而对于遗忘了很多知识的我来说,说是“看天书”也不为过,因不会使用(当然也有时间方面的种种因素),我选择放弃,去寻找其他更为简单的方法。在翻看了n个网页后,我终于在一个小角落找到了我现在使用的这个方法(虽然和其他人交流后得知他们都是轻而易举的找到了简单的方法),很是激动!!!一番周折后,我终于组装好了自己的代码,开始测试阶段。本着简单的原则,我选择了十倍测试,从100-1000,看着代码运行出来,确实很开心,不过我发现我的代码长得“有点丑”,有多个空格,以及一些看起来很不规整的问题,在调整了一番过后,我发现运行时间缩短了一点。测试到1000,000时,程序崩了,我一开始觉得可能是编译器的问题,下载了visual studio,还是运行失败,有同学告诉我,可以把栈改大,这样数据就不会溢出了,我又去搜索了更改的方法,不过结果还是失败,随后,好友在她的电脑上帮我测试了1000,000的数据。经过这次作业,我感觉我的意志经受了磨砺,抗挫折能力也得到了增强,收获了很多。
七、参考文献
八、附录(源代码)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main()
{
fstream fso("data.txt", ios::out);
clock_t startTime,endTime;
startTime = clock();//计时开始
int i;
for(i = 0; i < 1000000; ++i)
fso << rand() << ' ';
for (int i = 0; i < 2147483640; i++)
{
i++;
}
fso.close();
fstream fsi("data.txt", ios::in);
int x[1000000];
for(i = 0; i < 1000000; ++i)
fsi >> x[i];
int j;
for(i = 0; i < 1000000; ++i)
for(j = 999999; j > i; --j)
if(x[j - 1] > x[j])
{
int t = x[j];
x[j] = x[j - 1];
x[j - 1] = t;
}
for(i = 0; i < 1000000; ++i)
cout << x[i] << '\t';
cout <<endl;
endTime = clock();//计时结束
cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}