排序算法
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
您可能关注的文档
最近下载
- 反应机理(研)-高等无机化学.ppt VIP
- 218SS-PKE 摩托车操作说明书.pdf
- 2025年高考甘肃卷物理真题.docx VIP
- 凯恩帝K1TBIII-A-As数控系统用户手册.pdf
- 杭州电子科技大学信息工程学院2025-2026学年《概率论与数理统计2》第一学期期末试题(B).docx VIP
- 第2章 有理数的运算(单元测试·培优卷)含答案-2024人教版七年级数学上册.pdf VIP
- 中考1600词汇对照表(英译汉).doc VIP
- 杭州电子科技大学2025-2026学年《概率论与数理统计2》第一学期期末试题(B).docx VIP
- 香农三大定理详解.ppt VIP
- 【初中物理】专项练习:物体的密度及其测定40题(附答案).pdf VIP
原创力文档

文档评论(0)