博客
关于我
算法 排序 【详解插入排序】
阅读量:83 次
发布时间:2019-02-26

本文共 1163 字,大约阅读时间需要 3 分钟。

插入排序是一种经典的排序算法,以其简单易懂的思想和稳定性著称。尽管实现起来相对较为复杂,但它在某些场景下仍然被广泛使用。

插入排序的基本思想是通过将元素插入到有序序列中的适当位置来实现排序。具体而言,我们将数组分为三个部分:待插入序列、待插元素和剩余元素组。通过逐步将待插元素插入到正确位置,我们可以逐步完成排序。

让我们以一个简单的例子来理解这个过程。假设我们有一个数组[4, 3, 2, 1],我们可以将其分为三组:

  • 待插入序列:4, *3(*3表示一个占位符,用于表示即将插入的位置)
  • 待插元素:3
  • 剩余元素组:2, 1

通过逐步插入,我们可以看到插入排序的过程。首先,从第二个元素开始,我们进入第一趟插入排序的循环。对于每个元素,我们都会检查它与当前已排序部分的元素关系,并将其插入到正确的位置。

在代码实现中,我们可以使用一个外层循环控制插入的次数(总共需要进行n-1次插入)。内层循环则负责将当前元素插入正确位置。具体来说,我们从数组的第二个元素开始,逐步将元素向前移动,直到找到合适的位置。

插入的关键点在于,如果当前元素比前一个元素小,我们就将前一个元素向后移动一个位置,并继续比较;否则,我们结束当前插入循环,并将元素插入到当前位置。

通过这种方式,我们可以逐步完成数组的排序。插入排序的时间复杂度为O(n²),稳定性也较高,因为每次插入都不会破坏前面的元素顺序。

以下是实现代码:

template
void myInsertSort(T array[], int len) { for (int i = 1; i < len; ++i) { int j = i; T temp = array[i]; while (j > 0) { if (temp < array[j-1]) { array[j] = array[j-1]; j--; } else { break; } } array[j] = temp; }}

测试代码如下:

int a[] = {2, 6, 8, 4, 7, 10, 1};int len = sizeof(a) / sizeof(a[0]);myInsertSort(a, len);for (int i = 0; i < len; ++i) {    cout << a[i] << endl;}

通过上述代码,我们可以看到插入排序的实际运行效果。每一次循环都会将一个元素插入到正确的位置,最终完成整个数组的排序。

转载地址:http://klzz.baihongyu.com/

你可能感兴趣的文章
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
查看>>
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>
Python听写汇总结果
查看>>
python吊打Excel?屁!那是你不会用!
查看>>
Python合并两张图片 | 先叠透明度再合并 (附Demo)
查看>>
python各进制的表述与转换
查看>>
python各种库安装
查看>>
python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
查看>>
python可维护性_使用这7大神器,让你的Python 代码更容易于维护
查看>>
Python只运行一次while循环
查看>>
python变量的详细教程_Python零基础入门教程之语法入门[变量](第二期)
查看>>
Python变量命名方法-ChatGPT4o作答
查看>>
Python变量与运算符
查看>>
Python变量/运算符/函数/模块/string
查看>>
python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
查看>>
python系列【仅供参考】:python flask框架 debug功能
查看>>