“插入排序:小数据量排序的王者“

简介: “插入排序:小数据量排序的王者“

🔍什么是插入排序



插入排序是一种简单的排序算法,它的基本思想是:将待排序的元素,从第二个元素开始,依次与前面的已排好序的元素进行比较,将它插入到相应的位置中,直到所有的元素排序完成。在这个过程中,所有比插入元素大的元素都会依次后移一位,留出空间给它插入。


当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移.



🔑插入排序的优缺点



插入排序性能分析


  1. 元素集合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定


插入排序的优点在于简单、易于实现。对于已经有序的数组来说,插入排序只需要进行比较操作而不需要交换操作,因此速度非常快。但是对于无序数组来说,插入排序的时间复杂度会比较高,不太适合大规模的排序。插入排序的时间复杂度是O(n^2),但是在插入小规模数据时,插入排序比较高效。并且,插入排序是一种稳定的排序算法,即排序前后,每个元素的相对位置不会发生变化。所有他是小数据量排序的王者。


🚀实现插入排序



  • 具体实现过程如下:
  1. 从第二个元素开始,将当前元素作为待插入元素,存储在一个临时变量中。
  2. 将待插入元素与已排序的子序列中的元素进行比较,找到待插入位置。
  3. 将插入位置后的元素依次交换,为待插入元素腾出插入位置。

重复步骤 1-3,直到所有元素都插入到了已排序的子序列中,得到最终有序序列。


// 插入排序算法实现
void InsertSort(int* a, int n)
{
    // 循环遍历输入数组,共进行n-1轮插入操作
    for (int i = 0; i < n-1; ++i)
    {
        // 在[0, i]范围内是有序的,取 a[i+1] 的值进行比较并插入
        int end = i;  // end 表示有序区间的最后一个元素下标
        int tmp = a[i+1];  // 记录需要插入的元素值
        // 在有序区间内查找插入位置并移动元素
        while (end >= 0)
        {
            if (a[end] > tmp)  // 将比tmp大的元素向后移动
            {
                a[end + 1] = a[end];
                --end;  // 记录待插入元素应该处于的位置
            }
            else  // 如果找到了合适的插入位置,跳出循环
            {
                break;
            }
        }
        // 将 tmp 插入到待插入位置上
        a[end + 1] = tmp;
    }
}


上述代码的实现过程就是对于第i个元素,将其插入到已排好序的前i-1个元素中,使得前i个元素依旧有序。


  • 插入排序也是其他高级算法的基础,掌握它对于深入学习和研究排序算法是非常有帮助

的。

目录
相关文章
|
6月前
|
机器学习/深度学习 搜索推荐
【七大排序】最基础的排序——冒泡排序
【七大排序】最基础的排序——冒泡排序
39 4
|
6月前
|
搜索推荐
【海贼王的数据航海】排序——概念|直接插入排序|希尔排序
【海贼王的数据航海】排序——概念|直接插入排序|希尔排序
34 0
|
6月前
|
搜索推荐
【海贼王的数据航海】排序——直接选择排序|堆排序
【海贼王的数据航海】排序——直接选择排序|堆排序
27 0
|
7月前
|
算法 搜索推荐
【六大排序详解】中篇 :选择排序 与 堆排序
选择排序可以用扑克牌理解,眼睛看一遍所有牌,选择最小的放在最左边。然后略过刚才排完的那张,继续进行至扑克牌有序。这样一次一次的挑选,思路很顺畅。总结为: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
60 6
|
7月前
|
搜索推荐 测试技术
【六大排序详解】开篇 :插入排序 与 希尔排序
排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序存在稳定性,稳定性是评估排序的重要标准。
59 1
|
7月前
快速排序 通透百万数据秒级排序
快速排序 通透百万数据秒级排序
50 0
|
7月前
|
机器学习/深度学习 算法 搜索推荐
DS:八大排序之归并排序、计数排序
DS:八大排序之归并排序、计数排序
|
7月前
|
存储 算法 搜索推荐
计数排序-解决海量数据排序
计数排序-解决海量数据排序
65 0
|
7月前
|
搜索推荐 算法
【十大排序】带你深入了解归并排序
【十大排序】带你深入了解归并排序
|
存储 算法 搜索推荐
【排序】排序这样写才对Ⅰ --插入排序与选择排序
常见的排序算法有这些.将会分成几个章节讲完,感兴趣的uu们可以关注下我的排序专栏,方便和后期观看.
65 0