计算机软件技术冒泡排序,北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序...

a7f4a3f590493a1e451dd952a488fd7c.gif 北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序

(8页)

694b915a9bed263ed4c4d47c4d871391.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

19.90 积分

实验报告实验名称冒泡排序和快速排序班级学号姓名成绩实验概述【实验目的及要求】1实验目的通过编程程序达到熟悉并掌握教材中所介绍的几种排序方法。2实验内容1)随机产生20位整数2)输入序列,编写程序,按下列排序方法将序列从小到大排序并输出。1冒泡排序2快速排序3)纪录每种方法比较次数和移动次数3实验步骤和要求同上【实验原理】1冒泡排序冒泡排序(BUBBLESORT)的基本概念是依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。2快速排序设要排序的数组是A0AN1,首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是1)设置两个变量I、J,排序开始的时候I0,JN1;2)以第一个数组元素作为关键数据,赋值给KEY,即KEYA0;3)从J开始向前搜索,即由后开始向前搜索J,找到第一个小于KEY的值AJ,将AJ和AI互换;4)从I开始向后搜索,即由前开始向后搜索I,找到第一个大于KEY的AI,将AI和AJ互换;5)重复第3、4步,直到IJ;3,4步中,没找到符合条件的值,即3中AJ不小于KEY,4中AI不大于KEY的时候改变J、I的值,使得JJ1,II1,直至找到为止。找到符合条件的值,进行交换的时候I,J指针位置不变。另外,IJ这一过程一定正好是I或J完成的时候,此时令循环结束)。【实验环境】(使用的软硬件)处理器英特尔COREI54200M250GHZ双核内存4GB记忆科技DDR3L1600MHZ操作系统WINDOWS10专业版64位DIRECTX12编译环境DEVC561编译语言C实验内容【实验方案设计】1利用RAND函数生成20个随机数,并放到两个数组中分别用于冒泡排序和快速排序2利用比较和交换,每次讲一个最大的元素放到数组末尾,实现冒泡排序3在每次快速排序的算法中,先设置一个基准值,利用头指针和尾指针轮流比较数组中的元素,若遇到不属于LOW或HIGH的元素则交换到另一个组中去,最后将基准值放入首尾指针相交的位置上。利用递归调用实现对整个数组的快速排序算法。4整理实验结果,写出实验报告【实验过程】(实验步骤、记录、数据、分析)实验一源代码/实验3冒泡排序和快速排序1随机产生20位整数2输入序列,编写程序,按下列排序方法将序列从小到大排序并输出。1冒泡排序2快速排序3纪录每种方法比较次数和移动次数/INCLUDEINCLUDEDEFINEN20//定义用于比较和交换计数的全局变量STATICINTCOMPARE,MOVEINTMAIN{INTDATA1N,DATA2NINTIVOIDBUBBLESORTINT20VOIDQUICKSORTINT20,INT,INT//创建两个相同的数组用于两种排序方法FORI0IKEY{HIGHCOMPARE}//如果不是两指针相遇,说明存在需要交换到LOW的值IFLOWHIGH{ALOWAHIGHMOVE}//LOW中数据比基准小,则向后依次查找WHILELOWHIGHCOMPARE}//如果不是两指针相遇,说明存在需要交换到HIGH的值IFLOWHIGH{AHIGHALOWMOVE}}//首尾指针相遇后,将基准放入空位ALOWKEY//返回此时的键值RETURNLOW}运行结果【结论】(结果)1由实验结果知,编写的冒泡排序法和快速排序法都成功的将一个无序的数组排成了一个有序数组并打印输出,说明这两种算法是可行的。2从记录的比较值和移动值的大小来看,冒泡排序比较了190次,即NN1/2次,交换了87次;快速排序法比较了64次,交换了27次。可以明显的看出快速排序法的效率较高,运行速度较快。可以猜想,当数据量进一步扩大时,快速排序法将比冒泡排序法的平均运行速度更短【小结】这次的实验题目是关于两种算法的。由于在之前的C语言学习中我已经对这两种算法有了一个大致的了解,所以编写源程序及调试并不困难,最后的运行结果也是正确的。但是,与之前的学习不同的是,在本次试验中加入了对比较和交换次数的比较。这就涉及到了数据结构中算法的时间复杂度问题。经过查阅资料得知,冒泡排序最好的时间复杂度为ON。若初始文件是反序的,需要进行N1趟排序。每趟排序要进行NI次关键字的比较1≤I≤N1,且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值。冒泡排序的最坏时间复杂度为ON2。综上,冒泡排序总的平均时间复杂度为ON2。快速排序法的最坏情况运行时间为Θ(N2),且最坏情况发生在每次划分过程产生的两个区间分别包含N1个元素和1个元素的时候。最好情况是ONLOGN,出现在每次划分过程产生的区间大小都为N/2时。综上,快速排序总的平均时间复杂度为ON2。在数据量小时两者区别不大,但在数据量大且数据较无序时宜用快速排序法进行排序。另外,在编写代码的过程中,我也对快速排序法和冒泡排序法的逻辑思路有了一个更清楚的认识。快速排序法使用了递归和分治的思想,通过设置头指针和尾指针一步步将数组分成两部分,最后完成一趟时空出的位置就是基准值的位置。再利用递归的思想,把数组分成两部分,对每一部分进行快速排序,最后完成排序。指导教师评语及成绩成绩指导教师签名批阅日期 关 键 词: 北航 计算机 软件技术 基础 实验 报告 冒泡 排序 快速

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

本文标题:北航计算机软件技术基础实验报告计软实验报告3——冒泡排序和快速排序

链接地址: https://www.wenku365.com/p-6605030.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值