排序算法视频版 | 直接插入排序

Posted 二十二画程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法视频版 | 直接插入排序相关的知识,希望对你有一定的参考价值。

前面介绍了已经介绍了三种排序,暴力排序、冒泡排序和简单选择排序,一个共同点都是基于交换。

我们可以用另一种视角来看待排序,即将一个待排序的数组看成两个部分:有序区和乱序区。

在排序开始前,整个数组都是乱序区,而有序区则为空:

排序开始后,有序区逐渐扩大,乱序区逐渐缩小:

排序算法视频版 | 直接插入排序

排序完成后,整个数组都是有序区,乱序区则为空:

排序算法视频版 | 直接插入排序

核心思想:将数组看作无序区和有序区两个区,从无序区中选出一个元素,按大小插入到有序区的合适位置。当无序区为空时,有序区自然就完成排序了。

动态过程如下:

代码实现如下:

/*
 * 直接插入排序
 * array : 数组
 * length : 数组长度 
 */

void straight_insertion_sort(int *arrayint length)
{
    int i, j;
    // 外层循环 决定待插入值
    for (i = 1; i < length; i++) {
        if (array[i] < array[i - 1]) {
            int tmp = array[i]; // 待插入值
            // 内层循环 在有序区中为待插入值腾出位置
            for (j = i - 1; j >= 0 && array[j] > tmp; j--) {
                array[j + 1] = array[j];
            }
            array[j + 1] = tmp; // 插入
        }
    }
}

请注意插入元素到有序区的关键代码 array[j + 1] = tmp;中的 j+1

以上就是直接插入排序的基本原理。

完整代码请移步至 GitHub[1] | Gitee[2] 获取。

如有错误,还请指正。

推荐阅读

参考资料

[1]

GitHub: https://github.com/xingrenguanxue/Simple-DS-and-Easy-Algo

[2]

Gitee: https://gitee.com/xingrenguanxue/Simple-DS-and-Easy-Algo


以上是关于排序算法视频版 | 直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

十大经典排序算法动画与解析,看我就够了!(配代码完全版)

八大排序算法sum up,存干货,[ 建议收藏!!! ]

数据结构c语言版八大算法(上)图文详解带你快速掌握——希尔排序,堆排序,插入排序,选择排序,冒泡排序!

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

基础排序算法二——插入排序

常见排序算法-希尔排序