- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面试排序算法总结要点
排序算法
1、?插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-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?
您可能关注的文档
最近下载
- 俄国构成主义设计运动报告.ppt VIP
- 2025南方电网保山供电局项目制用工招聘(3人)笔试参考题库附答案解析.docx VIP
- 2025年广东省中学生天文知识竞赛试题(及答案).docx VIP
- 电镀基础知识100问.pdf VIP
- 党课:9.3纪念中国人民抗日战争暨世界反法西斯战争胜利80周年阅兵PPT课件.pptx VIP
- 高中数学--等差数列知识点归纳和习题检测.doc VIP
- 云南省2025年中考英语真题含答案.pptx VIP
- SW硅墨烯免拆模外墙保温系统工程作业指导书.docx VIP
- 2025-2026学年粤教花城版(2024)初中音乐七年级上册教学计划及进度表.docx
- 2025杭州电力设备制造有限公司招聘70人(第二批)笔试备考试题及答案解析.docx VIP
文档评论(0)