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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

十种排序算法比较.docx

1、十种排序算法比较十种排序算法比较排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准:(1)执行时间(2)存储空间(3)编程工作对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。主要排序法有:一、冒泡(Bubble)排序相邻交换二、选择排序每次最小/大排在相应的位置三、插入排序将下一个插入已排好的序列中四、壳(Shell)排序缩小增量五、归并排序六、快速排序七、堆排序八、拓扑排序九、锦标赛排序十、基数排序一、冒泡(Bubble)排序-Code 从小到大排序n个数-void BubbleSortArra

2、y()for(int i=1;in;i+)for(int j=0;iaj+1)/比较交换相邻元素int temp;temp=aj; aj=aj+1; aj+1=temp;-Code-效率 O(n2),适用于排序小列表。二、选择排序-Code 从小到大排序n个数-void SelectSortArray()int min_index;for(int i=0;in-1;i+)min_index=i;for(int j=i+1;jn;j+)/每次扫描选择最小项if(arrjarrmin_index) min_index=j;if(min_index!=i)/找到最小项交换,即将这一项移到列表中的正确

3、位置int temp;temp=arri; arri=arrmin_index; arrmin_index=temp;-Code-效率O(n2),适用于排序小的列表。三、插入排序-Code 从小到大排序n个数-void InsertSortArray()for(int i=1;i=0 & arrjtemp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/arrj+1=arrj;j-;arrj+1=temp;-Code-最佳效率O(n);最糟效率O(n2)与冒泡、选择相同,适用于排序小列表若列表基本有序,则插入排序比冒泡、选择更有效率。四、壳(Shell)排序缩小增量排序-C

4、ode 从小到大排序n个数-void ShellSortArray()for(int incr=3;incr0;incr-)/增量递减,以增量3,2,1为例for(int L=0;L(n-1)/incr;L+)/重复分成的每个子列表for(int i=L+incr;i=0&arrjtemp)arrj+incr=arrj;j-=incr;arrj+incr=temp;-Code-适用于排序小列表。效率估计O(nlog2n)O(n1.5),取决于增量值的最初大小。建议使用质数作为增量值,因为如果增量值是2的幂,则在下一个通道中会再次比较相同的元素。壳(Shell)排序改进了插入排序,减少了比较的次

5、数。是不稳定的排序,因为排序过程中元素可能会前后跳跃。五、归并排序-Code 从小到大排序-void MergeSort(int low,int high)if(low=high) return;/每个子列表中剩下一个元素时停止else int mid=(low+high)/2;/*将列表划分成相等的两个子列表,若有奇数个元素,则在左边子列表大于右侧子列表*/MergeSort(low,mid);/子列表进一步划分MergeSort(mid+1,high);int B=new int high-low+1;/新建一个数组,用于存放归并的元素for(int i=low,j=mid+1,k=low

6、;i=mid & j=high;k+)/*两个子列表进行排序归并,直到两个子列表中的一个结束*/if (arri=arrj;)Bk=arri;I+;else Bk=arrj; j+; for( ;j=high;j+,k+)/如果第二个子列表中仍然有元素,则追加到新列表Bk=arrj;for( ;i=mid;i+,k+)/如果在第一个子列表中仍然有元素,则追加到新列表中Bk=arri;for(int z=0;zhigh-low+1;z+)/将排序的数组B的 所有元素复制到原始数组arr中arrz=Bz;-Code-效率O(nlogn),归并的最佳、平均和最糟用例效率之间没有差异。适用于排序大列表

7、,基于分治法。六、快速排序-Code-/*快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。*/ void swap(int a,int b)int t;t =a ;a =b ;b =t ;int Partition(int arr,int low,int high)int pivot=arrlow;/采用子序列的第一个元素作为枢纽元素while (low high)/从后往前栽后半部分中寻找第一个小于枢纽元素的元素while (low = pivot)-high;/将这个比枢纽元素小的元素交换到前半部分swap(arrlow, arrhigh);/从前往后在前半部分中寻找第一个大于枢纽元素的元素while (low high &arr low =pivot )+low ;swap (arr low ,arr high );/将这个枢纽元素大的元素交换到后半部分return low ;/返回枢纽元素所在的位置

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

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