77范文网 - 专业文章范例文档资料分享平台

算法分析与设计和C++中不同排序算法的分析(2)

来源:网络收集 时间:2019-03-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

进行四次交换后:11 10 18 16 3 1 47 39 41 i j

进行五次交换后:11 10 18 16 1 3 47 39 41 i j

完成一趟排序: 11 10 18 16 1 3 19 47 i j 1)以28作为基准,第一趟排序后

序列如下:{11 10 18 16 1 3} 19 { 47 39 2)分别以11和47作为基准,排序后

序列如下:{3 10 1} 11 {16 18 } 19 {41 39} 3)分别以3、16、41作为基准,排序后

序列如下:1 3 10 11 16 18 19 39 41 最后排序结果是:[1 3 10 11 16 18 19 39 3.2.3快速排序的主程序 #include #include #include

void ks_Sort(int a[],int sta,int end)

//快速排序算法

{ if(sta==end) return;

int mid = midden(a,sta,end); ks_Sort(a,sta,mid); ks_Sort(a,mid+1,end);

}

void outToScreen(int a[],int len) {

int i = 0; 第 6 页 共 11 页

39 41

41} 47 47 41 47] }

while(i

cout<

cout<

3.3快速排序性能分析

根据上述快速排序的使用算法可得知,总的比较次数为O(nlog2n),所以快速排序的平均时间复杂度为O(nlog2n),空间复杂度为O(n)。

3.4快速排序适用范围

当辅助空间次大的时候、n很大的时候、需要排序的序列的复杂度为O(nlogn)或者需要排序的序列是无序的时候可以使用快速排序。

4直接选择排序

4.1直接选择排序思想

直接选择排序思想是:首先在一组对象v[i] ~v[n-1]中选择具有最小关键码的对象,若它不是这组对象中的第一个对象,则将它与这组对象中的第一对像对调,然后在这组对象中剔除这个具有最小关键码的对象,在剩下的对象v[i+1] ~v[n-1]中重复执行上述步骤,直到剩余对象只有一个为止。

4.2直接选择排序使用算法

4.2.1 直接选择排序示例

有如下数据{19 10 18 39 47 3 1 16 11 4} 对其进行直接选择排序(有序区间用[??]表示,无序区间用{??}表示)。

初始关键字序列: {19 10 18 39 47 3 1 16 11 4} 进行第一次排序后:[1] {10 18 39 47 3 19 16 11 4} 进行第二次排序后:[1 3] {18 39 47 10 19 16 11 4} 进行第三次排序后:[1 3 4 ] {39 47 10 19 16 11 18} 进行第四次排序后:[1 3 4 10] {47 39 19 16 11 18}

第 7 页 共 11 页

进行第五次排序后:[1 3 4 10 11] {39 19 16 47 18} 进行第六次排序后:[1 3 4 10 11 16] {19 39 47 18} 进行第七次排序后:[1 3 4 10 11 16 18] {39 47 19} 进行第八次排序后:[1 3 4 10 11 16 18 19] {39 47} 进行第九次排序后:[1 3 4 10 11 16 18 19 39] {47] 最后结果: [1 3 4 10 11 16 18 19 39 47] 4.2.2直接选择排序的程序 #include #include #include void Selectsort() {

for(i=1;i

for(j=i+1;j<=n;j++)

if(R[j].key

{

R[0]=R[i];R[i]=R[h];R[h]=R[0]; } } }

4.3直接选择排序性能分析

根据直接选择排序算法示例分别,找到关键码最小的记录需要进行n-1次比较,找出关键码次小的记录需要比较n-2次,??,找到第i个记录需比较n-i次,因此,总的比较次数为:(n-1)+(n-2)+??+2+1=n(n-1)/2 ≈n2/2,所以直接选择排序的时间复杂度为O(n2),辅助空间为O(1),直接选择排序是不稳定的排序方法。

4.4直接选择排序适用范围

当n的值较小(n<50)时,若因为直接移动的记录少于直接插入,选择直接选择

第 8 页 共 11 页

排序较好。

5希尔排序

5.1希尔排序的思想

希尔排序的思想是:先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序时”,再对全体记录进行一次直接插入排序。

5.2希尔排序的使用算法

5.2.1希尔排序的具体做法

希尔排序的具体做法是:设待排序对象序列有n个对象,首先去一个整数gap

5.2.2希尔排序的具体示例

对下列的序列{15 25 36 88 76 45 54 46 32 70}进行希尔排序,间隔值序列取5,3,1。

初始关键字: 15 25 36 88 76 45 54 46 32 70 gsp=5 {15 45} {25 54} {36 46} {88 32} {76 70} 第一趟排序结果: 45 54 46 32 70 15 25 36 88 76 gap=5 {45 32 25 76} {54 70 36} {46 15 88} 第二趟排序结果: 45 70 15 25 54 46 32 36 88 76 gap=3

第三趟排序结果: 15 25 32 36 45 46 54 70 76 88 gap=1

第 9 页 共 11 页

5.2.3希尔排序的主程序 #include #include #include void ShellSort() {

gap=n/2;//初次增量取序列元素个数n的一半为步长 while(gap>0)

{

for(i=gap+1;i<=n;i++)

{

j=i-gap;

while(j>0) {

I if(r[j]>r[j+gap]) {

x=r[j];r[j]=r[j+gap];r[j+gap]=x;

j=j-gap;

}//对子序列作直接插入排序 else

{ j=0; }

}

}

gap=gap/2;

}//每次减半,直至步长为1 }

5.3希尔排序的性能分析

希尔排序的速度一般要比直接插入排序快,希尔排序是一个较复杂的问题,因为它的时间复杂度是依赖与所取增量序列,一般认为是O(nlog2n)2,辅助空间为O(1), 希尔排序是一种不稳定的排序。

第 10 页 共 11 页

5.4希尔排序的适用范围

当需要排列的序列的数据量较小,并且需要重复排序可以用希尔排序。

总结

经过几天的查资料学习,总结去写这个结课论文,起初不知道从何写起,都是一些算法,如何分析?后面看到老师给的提示,就有了思路,根据算法的排序思想、使用算法、排序的复杂度、适用范围去分析每一个排序就可以。在做这次作业的过程中发现了很多的问题,知道要写的东西,却不能很准确的描述,需要借助书才能将自己想表达的东西表述清楚。知识学得不够扎实,只知其一不知其二,有些东西无法进行。就像一些排序里的算法分析,适用范围都不知道如何的写,需要查书,查些资料,将其进行归纳总结才能成为自己的。每一个排序算法的时间复杂度或者空间复杂度都是很简单的,只要能够弄懂一个排序算法的时间复杂度或者空间复杂度,其他的就一反三都可以出来。每个算法的都是能理解思想,用数字可以将它们排序,可是要编一个程序将这些数字放入程序去执行,还是有很大的困难。思想虽理解,却无法用程序实现,还需要去更深入的学习编程的知识,才能将其应用。我明白仅仅通过课堂教学或自学获取理论知识是远远不够的,还必须加强实践,亲自上机输入、编辑、检查、修改、调试和运行各种典型算法,才更深入的理解这些算法。

第 11 页 共 11 页

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库算法分析与设计和C++中不同排序算法的分析(2)在线全文阅读。

算法分析与设计和C++中不同排序算法的分析(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/524495.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: