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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(CC++笔试面试题目汇总3_各种排序算法.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

CC++笔试面试题目汇总3_各种排序算法.doc

1、C/C+笔试面试题目汇总 3各种排序算法 原文: O 方法来表示。在后面我将给出详细的说明。对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。我将按照算法的复杂度,从简单到难来分析算法。第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为 O(N*N)(因为没有使用 word,所以无法打出上标和下标)。第二部分是高级排序算法,复杂度为 O(Log2(N)。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。第三部分类似动脑筋。这里的两种算法并不是最好的(甚至有最慢的),但是算法本身比较奇特,值得参考(编程的角度)。同时也可以让我们从另外的角度

2、来认识这个问题。第四部分是我送给大家的一个餐后的甜点一个基于模板的通用快速排序。由于是模板函数可以对任何数据类型排序(抱歉,里面使用了一些论坛专家的呢称)。一、简单排序算法由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的 VC 环境下运行通过。因为没有涉及 MFC 和 WINDOWS 的内容,所以在 BORLAND C+的平台上应该也不会有什么问题的。在代码的后面给出了运行过程示意,希望对理解有帮助。1.冒泡法:(Gilbert:点这里有视频)这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:#include void Bubble

3、Sort(int* pData,int Count)int iTemp;for(int i=1;i=i;j-)if(pDataj10,9,7,8-10,7,9,8-7,10,9,8(交换 3 次)第二轮:7,10,9,8-7,10,8,9-7,8,10,9(交换 2 次)第一轮:7,8,10,9-7,8,9,10(交换 1 次)循环次数:6 次交换次数:6 次其他:第一轮:8,10,7,9-8,10,7,9-8,7,10,9-7,8,10,9(交换 2 次)第二轮:7,8,10,9-7,8,10,9-7,8,10,9(交换 0 次)第一轮:7,8,10,9-7,8,9,10(交换 1 次)循环

4、次数:6 次交换次数:3 次上面我们给出了程序段,现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换,显然,次数越多,性能就越差。从上面的程序我们可以看出循环的次数是固定的,为 1+2+.+n-1。写成公式就是 1/2*(n-1)*n。现在注意,我们给出 O 方法的定义:若存在一常量 K 和起点 n0,使当 n=n0 时,有 f(n)void ExchangeSort(int* pData,int Count)int iTemp;for(int i=0;i9,10,8,7-8,10,9,7-7,10,9,8(交换 3 次)第二轮:7,10,9,8-7,9,10,8-7,8,10,9(

5、交换 2 次)第一轮:7,8,10,9-7,8,9,10(交换 1 次)循环次数:6 次交换次数:6 次其他:第一轮:8,10,7,9-8,10,7,9-7,10,8,9-7,10,8,9(交换 1 次)第二轮:7,10,8,9-7,8,10,9-7,8,10,9(交换 1 次)第一轮:7,8,10,9-7,8,9,10(交换 1 次)循环次数:6 次交换次数:3 次从运行的表格来看,交换几乎和冒泡一样糟。事实确实如此。循环次数和冒泡一样也是 1/2*(n-1)*n,所以算法的复杂度仍然是 O(n*n)。由于我们无法给出所有的情况,所以只能直接告诉大家他们在交换上面也是一样的糟糕(在某些情况下

6、稍好,在某些情况下稍差)。3.选择法:现在我们终于可以看到一点希望:选择法,这种方法提高了一点性能(某些情况下)这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从省下的部分中选择最小的与第二个交换,这样往复下去。#include void SelectSort(int* pData,int Count)int iTemp;int iPos;for(int i=0;i(iTemp=9)10,9,8,7-(iTemp=8)10,9,8,7-(iTemp=7)7,9,8,10(交换 1 次)第二轮:7,9,8,10-7,9,8,10(iTemp=8)-(iTemp=8)7,8,9

7、,10(交换 1 次)第一轮:7,8,9,10-(iTemp=9)7,8,9,10(交换 0 次)循环次数:6 次交换次数:2 次其他:第一轮:8,10,7,9-(iTemp=8)8,10,7,9-(iTemp=7)8,10,7,9-(iTemp=7)7,10,8,9(交换 1 次)第二轮:7,10,8,9-(iTemp=8)7,10,8,9-(iTemp=8)7,8,10,9(交换 1 次)第一轮:7,8,10,9-(iTemp=9)7,8,9,10(交换 1 次)循环次数:6 次交换次数:3 次遗憾的是算法需要的循环次数依然是 1/2*(n-1)*n。所以算法复杂度为 O(n*n)。我们来

8、看他的交换。由于每次外层循环只产生一次交换(只有一个最小值)。所以 f(n)void InsertSort(int* pData,int Count)int iTemp;int iPos;for(int i=1;i=0) int middle,iTemp;i = left;j = right;middle = pData(left+right)/2; /求中间值dowhile(pDataimiddle) if(ii) ,递归右半边if(righti)run(pData,i,right);void QuickSort(int* pData,int Count)run(pData,0,Count-

9、1);void main()int data = 10,9,8,7,6,5,4;QuickSort(data,7);for (int i=0;ivoid Bubble2Sort(int* pData,int Count)int iTemp;int left = 1;int right =Count -1;int t;do/正向的部分for(int i=right;i=left;i-)if(pDataivoid ShellSort(int* pData,int Count)int step4;step0 = 9;step1 = 5;step2 = 3;step3 = 1;int iTemp;int k,s,w;for(int i=0;i=0) w = w-k;pDataw+k = iTemp;void main()int data = 10,9,8,7,6,5,4,3,2,1,-10,-1;ShellSort(data,12);for (int i=0;i12;i+)coutdatai“ “;cout“n“;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报