- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- GP-150中文说明书.pdf VIP
- 中文说明书-船舶自动识别系统(AIS)FA-150版.docx VIP
- FAR21X7_28X7雷达中文操作说明书.pdf VIP
- 2025届广东深圳市物理高一第一学期期末教学质量检测试题含解析.doc VIP
- 广东高一物理第一学期期末试题.doc VIP
- 水资源及其利用——人类拥有的水资源及其分布.pdf VIP
- FURUNO古野OZS56490D_NX700使用说明书.pdf VIP
- 青岛啤酒股份有限公司成本控制存在问题及对策研究.doc
- 生物安全柜使用与维护保养记录表.doc VIP
- 输变电工程施工质量验收统一表式(变电工程电气专业).docx VIP
文档评论(0)