c++插入排序详解

yizhihongxing

c++插入排序详解

1. 插入排序算法介绍

插入排序法是一种简单直观的排序方法。它的基本思路是通过每次将一个待排序的元素按照其大小插入到已经排好序的一组元素中,直到全部元素插入完毕,即排序完毕。

在实际应用中,对于较小的数据集,插入排序通常比快速排序和归并排序等复杂度为O(nlogn)的算法执行效率更高。

2. 插入排序算法的实现

下面给出一个C++实现的插入排序算法,其中参数arr为待排序的数组,len为数组中元素个数:

void insertSort(int arr[], int len) {
    for (int i = 1; i < len; ++i) {
        int key = arr[i];
        int j = i - 1;
        while (j>=0 && arr[j]>key) {
            arr[j+1] = arr[j];
            j = j - 1;
        }
        arr[j+1] = key;
    }
}

3. 插入排序算法的示例说明

以下分别给出插入排序算法的两个示例说明:

示例1

给定一个数组arr={5, 2, 6, 7, 1},按照从小到大的顺序进行插入排序。

初始状态

步骤 0 1 2 3 4
arr 5 2 6 7 1

第一次排序

将2插入到已经排序好的5之前:

步骤 0 1 2 3 4
arr 2 5 6 7 1

第二次排序

将6插入到已经排序好的2,5之后:

步骤 0 1 2 3 4
arr 2 5 6 7 1

第三次排序

将7插入到已经排序好的2,5,6之后:

步骤 0 1 2 3 4
arr 2 5 6 7 1

第四次排序

将1插入到已经排序好的2之前:

步骤 0 1 2 3 4
arr 1 2 5 6 7

因此,最终排序结果为:1 2 5 6 7。

示例2

给定一个数组arr={3, 1, 4, 6, 3, 9, 0, 8, 7},按照从小到大的顺序进行插入排序。

初始状态

步骤 0 1 2 3 4 5 6 7 8
arr 3 1 4 6 3 9 0 8 7

第一次排序

将1插入到已经排序好的3之前:

步骤 0 1 2 3 4 5 6 7 8
arr 1 3 4 6 3 9 0 8 7

第二次排序

将4插入到已经排序好的1,3之后:

步骤 0 1 2 3 4 5 6 7 8
arr 1 3 4 6 3 9 0 8 7

第三次排序

将6插入到已经排序好的1,3,4之后:

步骤 0 1 2 3 4 5 6 7 8
arr 1 3 4 6 3 9 0 8 7

第四次排序

将3插入到已经排序好的1之前:

步骤 0 1 2 3 4 5 6 7 8
arr 1 3 4 6 3 9 0 8 7

第五次排序

将9插入到已经排序好的1,3,4,6之后:

步骤 0 1 2 3 4 5 6 7 8
arr 1 3 4 6 3 9 0 8 7

第六次排序

将0插入到已经排序好的1之前:

步骤 0 1 2 3 4 5 6 7 8
arr 0 1 3 4 6 3 9 8 7

第七次排序

将8插入到已经排序好的0,1,3,4,6之后:

步骤 0 1 2 3 4 5 6 7 8
arr 0 1 3 4 6 3 9 8 7

第八次排序

将7插入到已经排序好的0,1,3,4,6,8之后:

步骤 0 1 2 3 4 5 6 7 8
arr 0 1 3 4 6 3 9 8 7

因此,最终排序结果为:0 1 3 4 6 7 8 9。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++插入排序详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C++实现堆排序示例

    下面就详细讲解一下“C++实现堆排序示例”的完整攻略。 什么是堆排序 堆排序是一种树形选择排序方法,它是通过将待排序的序列构建成一个堆,在堆中,全局最大或最小的元素总是位于根节点,根节点最大或最小的元素会被输出到一个新的序列中,再将剩余的元素重新构建成堆进行下一轮循环,直到所有元素均被输出为止。 实现步骤 堆排序主要有两个步骤:构建堆和调整堆。 构建堆 将待…

    算法与数据结构 2023年5月19日
    00
  • PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解

    PHP是一门广泛应用于Web开发领域的脚本语言,而算法在计算机科学领域也是非常重要的一部分,掌握一些常用的算法能够为程序员的工作带来极大的便利。本文将详细讲解PHP冒泡排序、二分查找、顺序查找、二维数组排序算法函数的详解。 冒泡排序 冒泡排序是一种比较简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就将它们交换,直到没有任何一对…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • C++实现希尔排序(ShellSort)

    下面是关于C++实现希尔排序(ShellSort)的攻略。 什么是希尔排序? 希尔排序是插入排序的一种改进版本,与普通插入排序不同的是,它会先将数组按一定间隔 gap 分成若干个小组进行插入排序,然后缩小间隔再分组排序,直到最后 gap 为 1,此时整个序列就是有序的。希尔排序的本质就是分组的插入排序。 希尔排序的代码实现 下面针对希尔排序的核心代码进行讲解…

    算法与数据结构 2023年5月19日
    00
  • Swift中排序算法的简单取舍详解

    Swift中排序算法的简单取舍详解 排序算法在编程中是非常常见的算法之一,从小到大或者从大到小排列一串数字列表,这是必不可少的需求。在Swift编程语言中,也提供了多种排序算法供我们使用。但是,不同的排序算法在排序过程中的时间复杂度和空间复杂度往往是不同的。因此,在实际的编程中,我们需要根据实际情况来选择合适的排序算法。本文将为大家详细讲解Swift中四种常…

    算法与数据结构 2023年5月19日
    00
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)

    接下来我将为大家详细讲解“C语言常见排序算法之插入排序(直接插入排序, 希尔排序)”。 直接插入排序 算法思路 直接插入排序算法的实现思路是:将一个无序的数据序列分为一个有序子序列和一个无序子序列两部分,将无序子序列的元素一个一个插入到有序子序列中,直到插入完所有元素,最终形成一个新的有序序列。在具体编写代码时,我们会将数据序列看作是一个数组来进行操作。 代…

    算法与数据结构 2023年5月19日
    00
  • PHP排序算法之快速排序(Quick Sort)及其优化算法详解

    PHP排序算法之快速排序(Quick Sort)及其优化算法详解 快速排序是一种高效的排序算法,也是PHP中常用的排序方法之一。在本攻略中,我们将介绍快速排序的基本思想与原理,以及一些优化算法和实际示例。 快速排序基本原理 快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部…

    算法与数据结构 2023年5月19日
    00
  • C++归并排序算法详解

    C++归并排序算法详解 什么是归并排序 归并排序是一种基于“分治思想”的排序算法,它将待排序的数组不断分割成若干个子数组,直到每个子数组中只有一个元素。然后将那些只有一个元素的子数组归并成两个元素有序的子数组;接着将两个元素有序的子数组再次归并成四个元素有序的子数组;依次类推,直到归并为一个完整的排序数组。 归并排序的流程 1.分解:将待排序的数组从中间分割…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部