ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:852.68KB ,
资源ID:3439699      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3439699.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验 排序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验 排序.docx

1、数据结构实验 排序 实验报告学生姓名: 黄家明 学 号: 6103115017 专业班级: 计科151班 实验类型: 验证 综合 设计 创新 实验日期: 2017/5/24 实验成绩: 一、实验目的 深入了解各种内部排序方法及效率分析。二、问题描述 各种内部排序算法的时间复杂度分析,试通过随机数据比较算法的关键字比较次数和关键字移动次数。三、实验要求1、对起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序这六种常用排序算法进行比较。2、待排序表的表长不超过100;其中数据用伪随机数产生程序产生。1、 至少要用6组不同的输入数据做比较。2、 要对实验结果做简单分析。四、实验环境PC

2、微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤 1、根据问题描述写出基本算法。 2、设计六种排序算法并用适当语言实现。 3、输入几组随机数据,并对其关键字比较次数和关键字移动次数的比较。 4、对结果进行分析。 5、进行总结。六、测试数据 数据有随机数产生器产生。七、实验结果随机数产生器产生器代码,利用rand(), srand()产生随机数#include using namespace std;int main() /测试数据输出到data.in文件中 freopen(/Users/huangjiaming/Docu

3、ments/Algorithm/src/data.in, w, stdout); int n; srand(unsigned)time(0); while (scanf(%d, &n) printf(%dn, n); for (int i = 0; i n; i+) printf(%d , rand()%10000); printf(n); return 0;冒泡排序的实现代码:void BubbleSort(int arr, int n) double start = clock(); printf(排序数据大小:%d, 冒泡排序后:n, n); for (int i = 0; i n; i

4、+) for (int j = i; j aj) ai = aj = ai = aj; double end = clock(); print(a, n); printf(冒泡排序花费的时间 = %.6lfsnn, (double)(end - start)/CLOCKS_PER_SEC);直接插入排序的实现代码:void insertsort(int arr, int n) double start = clock(); printf(排序数据大小:%d, 直接插入排序后:n, n); for(int i = 1;i n; i +) /0,i-1都是有序的。如果待插入元素比arri-1还大则

5、无需再与i-1前面的元素进行比较了,反之则进入if语句 if(arri = 0 & arrj temp; j-) arrj+1 = arrj; /把比temp大或相等的元素全部往后移动一个位置 arrj+1 = temp; /把待排序的元素temp插入腾出位置的(j+1) double end = clock(); print(a, n); printf(直接插入排序花费的时间 = %.6lfsnn, (double)(end - start)/CLOCKS_PER_SEC);简单选择排序的实现代码:void selectionSort(int arr,int n) double start

6、= clock(); printf(排序数据大小:%d, 简单选择排序后:n, n); for(int i = 0;i n; i+) int min = i; / 找出本轮中最小的位置 for(int j=i+1;jn;j+) if(arrj right) return; int temp = arrleft; /temp中为基准数 int i = left, j = right; while (i != j) /从右边开始找 while (arrj = temp & i j) j-; /再从左边开始找 while (arri = temp & i j) i+; if (i 0) /无序部分

7、for(int i = step; i = 0 & temp arrj; j = j - step) /在找到当前元素合适位置前,元素后移 arrj+step = arrj; arrj+step = temp; step /= 2; double end = clock(); print(a, n); printf(希尔选择排序花费的时间 = %.6lfsnn, (double)(end - start)/CLOCKS_PER_SEC);堆排序实现代码void adjustHeap(int arr, int p, int len) int curParent = arrp; int child

8、 = 2* p + 1; /左孩子 while(child len) /没有孩子 if(child+1 len & arrchild arrchild+1) child+; /较大孩子的下标 if(curParent=0; i-) adjustHeap(arr, i, len); for(int i = len -1; i=0; i-) int maxEle = arr0; arr0 = arri; arri = maxEle; adjustHeap(arr, 0, i); 实验过程如下,生成随机数,总共三组,数据大小分别为10、1000、100001、 冒泡排序测试排序消耗的时间分别为0.0

9、00025s、0.002381s、0.312073s,时间复杂度为O(n2)2、 直接插入排序测试排序消耗的时间分别为0.000086s、0.001031s、0.082690s,时间复杂度为O(n2)3、 简单选择排序测试排序消耗的时间分别为0.000025s、0.001450s、0. 135557s,时间复杂度为O(n2)4、 快速排序测试排序消耗的时间分别为0.000027s、0.00119s、0. 001427s,时间复杂度为O(n*log2n)5、 希尔排序测试排序消耗的时间分别为0.000067s、0.00167s、0. 002567s,时间复杂度不确定6、 堆排序测试排序消耗的时间分别为0.000024s、0.00118s、0. 001859s,时间复杂度O(n*log2n)八、问题以及思考经过实验,可以得出排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)O(n)选择排序O(n2)O(n2)稳定O(1)插入排序O(n2)O(n2)稳定O(1)堆排序O(n*log2n)O(n*log2n)不稳定O(1)希尔排序OO不稳定O(1) 而在实验结果中,对于数据比较大的测试,它们之间的排序效率差异较为明显。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1