排序算法可视化.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《排序算法可视化.doc》由会员分享,可在线阅读,更多相关《排序算法可视化.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流排序算法可视化.精品文档. 排序算法可视化摘 要:排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。排序的方法有很多,但就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境(如记录的初始排列状态等)下使用。本论文主要讨论七种排序算法,即直接插入排序,简单选择排序,冒泡排序,冒泡排序改进算法一,二,快速排序与归并排序。论文中我们用DirectX创建对象,对象由随机生成,无需人工干预来选择或者输入数据。比较的指标为关键字的比较次数和关键字
2、的移动次数。关键词: 直接插入排序,简单选择排序,冒泡排序,冒泡排序改进算法快速排序,归并排序 Sorting algorithmvisualizationLI Chen Xing(School of computer and Software engineering XiHua University.,Chengdu 610065 China)Abstract:Sorting is a computer programming is an important operation , and its function is a data element ( or record ) in any
3、 sequence , rearranged an ordered sequence by keyword . There are a lot of sort of way, but its overall performance , it is hard proposed method is considered to be the best , each method has its own advantages and disadvantages , suitable for different environments ( such as the initial alignment s
4、tate record etc.) use . This paper focuses on seven kinds of sorting algorithms , namely, direct insertion sort, simply select sort, bubble sort , bubble sort algorithm is an improvement , two , quick sort and merge sort . Paper we create objects with DirectX, the object is generated by random , wit
5、hout human intervention to select or enter data. Compare the number of key indicators to compare the number of keywords and mobile .Keywords: bubble sort, simple selection sort, quick sort,merge sort,straight insert sort. 1数据结构设计1.1.基础知识在计算机所描绘的3D世界中,所有的物体模型(如树木,人物,山峦)都是通过多边形网格来逼近表示的,这些多边形可以是三角形,也可以
6、是四边形。任何物体都可以用三角形网格来逼近表示,三角形网格是构建物体模型的基本单元。众所周知,一个三角形有三个顶点,为了能够通过大量的三角形组成三角形网格来描述物体,首先需要定义好三角形的顶点(Vertex),三个顶点确定一个三角形,而顶点除了定义每个顶点的坐标位置以外,还含有颜色等其他属性。在Direct3D中,顶点的具体表现形式是顶点缓存(Vertex Buffer),顶点缓存保存了顶点数据的内存空间。灵活顶点格式(Flexible Vertex Format,FVF)来描述三角形网格的每个顶点。1.2顶点缓存使用1.2.1设计顶点缓存struct stD3DVertex float x,
7、 y, z, rhw;/顶点的三维坐标值,x,y,z,以及rhw值(包含经过坐标变换的顶点坐标值) unsigned long color;/顶点的颜色值stD3DVertex objData300;/顶点数组#define D3DFVF_VERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)/FVF灵活顶点格式1.2.2 创建顶点缓存创建顶点缓存的代码合起来就是:LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer = NULL; /顶点缓冲区对象/创建顶点缓冲区if(FAILED(g_D3DDevice-CreateVertexBuffer
8、(sizeof(objData), 0, D3DFVF_VERTEX, D3DPOOL_DEFAULT, &g_VertexBuffer, NULL) return false;.顶点缓存使用四步曲之三:访问顶点缓存for(i = 0;i Lock( 0, sizeof(vertices), (void*)&pVertices, 0 ) ;/加锁 memcpy(ptr, objData, sizeof(objData);/顶点数组内容的拷贝 g_pVertexBuffer-Unlock();/解锁1.2.3图形的绘制 / 【Direct3D渲染五步曲之二】:开始绘制 g_pd3dDevice-
9、BeginScene(); / 开始绘制/ 【Direct3D渲染五步曲之三】:正式绘制,利用顶点缓存绘制图形 g_pd3dDevice-SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD); g_pd3dDevice-SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice-SetFVF( D3DFVF_CUSTOMVERTEX ); g_D3DDevice-DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 298);/ 【Di
10、rect3D渲染五步曲之四】:结束绘制 g_pd3dDevice-EndScene(); / 结束绘制 2 三种排序算法2.1直接插入排序(straight insert sort)2.1.1基本原理将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存储和判断数组边界之用。2.1.2排序稳定性 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插
11、入排序是稳定的。2.1.3算法的实现void StraightInsertSort()int i,j,pos,t;init();/从小到大排序Sleep(2000);for(i= 4; i objDatai-4.y) /若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入int j= i-4;int x = objDatai.y; /复制为哨兵,即存储待排序元素while(x objDataj.y) /查找在有序表的插入位置objDataj+4.y = objDataj.y;objDataj+6.y = objDataj+2.y;j-=4; /元素后移if(j0)break;obj
12、Dataj+4.y = x; /插入到正确位置objDataj+6.y = x;2.1.4时间复杂度分析从空间来看,它只需要一个记录的辅助空间,从时间来看,排序的基本操作为:比较两个关键字的大小和移动记录。于当待排序列为正序的时候,所需进行关键字间比较的次数达最小值n-1,记录不需移动;反之,当为逆序的时候,总队比较次数为(n+2)*(n+1)/2,记录移动的次数也达到最大值(n+4)*(n-1)/2。若待排记录是随机的,取上述最小值与最大值的平均值,约为n*n/4。所以它的时间复杂度为。2.2简单选择排序(simple selection sort)2.2.1基本原理在要排序的一组数中,选出
13、最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。2.2.2排序稳定性选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2
14、交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。2.2.3算法实现void SelectSort()init();Sleep(2000);int key, tmp;for(int i = 0; i=296; i+=4) key = SelectMinKey(objData, 296,i); /选择最小的元素if(key != i)tmp = objDatai.y; objDatai.y = objDatakey.y;objDatai+2.y =objDatai.y ;objDatakey.y = tmp; /最小元素与第i位置元素互换objDatakey+
15、2.y = objDatakey.y;2.2.4时间复杂度分析选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数,比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+.+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。该算法运行时间与元素的初始排列无关。不论初始排列如何,该算法都必
16、须执行n-1趟,每趟执行n-i-1次关键字的比较,这样总的比较次数为:所以,简单选择排序的最好、最坏和平均情况的时间复杂度都为。2.3冒泡排序(bubble sort)2.3.1基本原理在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。2.3.2排序稳定性冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 算法 可视化
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内