面试排序算法总结概要.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面试排序算法总结概要

排序算法 1、?插入排序 以下面5个无序的数据为例: 65 27 59 64 58 (文中仅细化了第四次插入过程) 第1次插入: 27 65 59 64 58 第2次插入: 27 59 65 64 58 第3次插入: 27 59 64 65 58 第4次插入: 27 58 59 64 65 二. 、效率分析 稳定? 空间复杂度O(1)? 时间复杂度O(n2)? 最差情况:反序,需要移动n*(n-1)/2个元素? 最好情况:正序,不需要移动元素 数组在已排序或者是“近似排序”时,插入排序效率的最好情况运行时间为O(n); 插入排序最坏情况运行时间和平均情况运行时间都为O(n2)。 通常,插入排序呈现出二次排序算法中的最佳性能。 对于具有较少元素(如n=15)的列表来说,二次算法十分有效。 在列表已被排序时,插入排序是线性算法O(n)。 在列表“近似排序”时,插入排序仍然是线性算法。 在列表的许多元素已位于正确的位置上时,就会出现“近似排序”的条件。 通过使用O(nlog2n)效率的算法(如快速排序)对数组进行部分排序, 然后再进行选择排序,某些高级的排序算法就是这样实现的。 三. 算法实现 从前向后查找的插入排序: [cpp]?view plain?copy /********************************************************? *函数名称:InsertSort? *参数说明:pDataArray?无序数组;? *??????????iDataNum为无序数据个数? *说明:????插入排序? *********************************************************/?? void?InsertSort(int*?pDataArray,?int?iDataNum)?? {?? ????for?(int?i?=?1;?i??iDataNum;?i++)????//从第2个数据开始插入?? ????{?? ????????int?j?=?0;?? ????????while?(j??i??pDataArray[j]?=?pDataArray[i])????//寻找插入的位置?? ????????????j++;?? ?????????? ????????if?(j??i)????//i位置之前,有比pDataArray[i]大的数,则进行挪动和插入?? ????????{?? ????????????int?k?=?i;?? ????????????int?temp?=?pDataArray[i];?? ????????????while?(k??j)????//挪动位置?? ????????????{?? ????????????????pDataArray[k]?=?pDataArray[k-1];?? ????????????????k--;?? ????????????}?? ????????????pDataArray[k]?=?temp;????//插入?? ????????}?? ????}?? }?? 但楼主发现从后面查找插入的方式,代码复杂程度较低: [cpp]?view plain?copy /********************************************************? *函数名称:InsertSort? *参数说明:pDataArray?无序数组;? *??????????iDataNum为无序数据个数? *说明:????插入排序? *********************************************************/?? void?InsertSort(int*?pDataArray,?int?iDataNum)?? {?? ????for?(int?i?=?1;?i??iDataNum;?i++)????//从第2个数据开始插入?? ????{?? ????????int?j?=?i?-?1;?? ????????int?temp?=?pDataArray[i];????//记录要插入的数据?? ????????while?(j?=?0??pDataArray[j]??temp)??//从后向前,找到比其小的数位置?? ????????{?? ????????????pDataArray[j+1]?=?pDataArray[j];????//向后挪动?? ????????????j--;?? ????????}?? ?? ????????if?(j?!=?i?-?1)????//存在比其小的数?? ????????????pDataArray[j

文档评论(0)

0022515 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档