直接插入排序,整个排序的过程为 n-1 趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第二个记录开始,逐个进行插入,直至整个序列变成有序。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 本课我们分为直接插入排序,下一节视频我们演示折半插入排序(二分法插入排序)
算法思想:
当插入第 i 个元素时,前面的 i-1 个元素已经有序。其实直接插入排序就是拿一个数,放到前面有序的数中就可以了。具体怎么放,不管是循环交换两个数的位置,还是先找到位置,再将该位置后面的数顺移.
直接插入排序模块
.版本 2 .子程序 直接插入排序 .参数 参数组, 整数型, 参考 数组 .局部变量 数组长度, 整数型, , , 数组的长度 .局部变量 无序区首, 整数型, , , 将无序区第一个结点插入到有序区中的位置 .局部变量 临时变量, 整数型, , , 暂时存放无序区第一个结点的数据 .局部变量 移动点, 整数型, , , 移动数据时的控制变量 .局部变量 插入点, 整数型 .局部变量 记次变量, 整数型 数组长度 = 取数组成员数 (参数组) .如果真 (数组长度 ≤ 1) 返回 () .如果真结束 .变量循环首 (2, 数组长度, 1, 无序区首) ' 需要进行n-1次插入运算。 .计次循环首 (无序区首 - 1, 插入点) ' 在有序区中寻找插入位置。 .如果真 (参数组 [无序区首] ≤ 参数组 [插入点]) ' 此为升序排序的插入条件。 跳出循环 () ' 找到了插入位置。 .如果真结束 .计次循环尾 () 临时变量 = 参数组 [无序区首] .变量循环首 (无序区首, 插入点 + 1, -1, 移动点) ' 插入运算 参数组 [移动点] = 参数组 [移动点 - 1] .变量循环尾 () 参数组 [插入点] = 临时变量 .变量循环尾 ()