c++插入排序详解

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语言的冒泡排序和快速排序算法使用实例 什么是排序算法 排序算法是一种将一组数据按照特定顺序排列的算法。常见的排序算法包括冒泡排序、快速排序、插入排序、选择排序等。 冒泡排序 冒泡排序是一种简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程,直到没有再需要交换的元素,即排序完成。 以下是 C 语…

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第一天 七大经典排序【上】

    我会为你详细讲解“算法系列15天速成 第一天 七大经典排序【上】”的完整攻略。 标题 算法系列15天速成 第一天 七大经典排序【上】 内容 本文主要介绍了常用的七大经典排序算法,分别是插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序以及堆排序。对每个算法的特点、实现过程和时间复杂度进行了详细的讲解,同时也对每个算法进行了简单的示例说明。 插入排序 …

    算法与数据结构 2023年5月19日
    00
  • C/C++语言八大排序算法之桶排序全过程示例详解

    C/C++语言八大排序算法之桶排序全过程示例详解 什么是桶排序 桶排序(Bucket Sort)是一种线性排序算法,它的基本思想是将数组内的元素根据某个规则分配到若干个桶中,然后对每个桶内的元素进行排序,最终合并每个桶内的有序元素即可得到原数组的有序结果。 桶排序的主要应用场景是待排序元素的分布比较均匀的情况下,性能表现优于其他排序算法(例如快速排序、归并排…

    算法与数据结构 2023年5月19日
    00
  • 七大经典排序算法图解

    “七大经典排序算法图解”攻略 简要介绍 “七大经典排序算法图解”是一篇介绍常见排序算法的文章。通过对每个算法的思想、代码实现和性能分析进行详细讲解,帮助读者更好地理解和掌握排序算法。 算法列表 本文介绍的七个排序算法如下: 冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序 希尔排序 冒泡排序 冒泡排序是一种简单的排序算法,它基于交换相邻元素的思想。具…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的冒泡排序法

    JavaScript中的冒泡排序法 冒泡排序法就是通过比较任意两个相邻的元素,然后循环遍历整个数组,逐步将最大(或最小)的数移到最后一位。当没有相邻的元素需要互换位置的时候即可完成排序。冒泡排序法是常用的简单排序算法,虽然时间复杂度比高级算法如快速排序、堆排序等要高,但是对于小的数据集合,其性能表现要好于其他排序算法。 以下是冒泡排序法的具体实现: func…

    算法与数据结构 2023年5月19日
    00
  • java实现对map的字典序排序操作示例

    下面是Java实现对Map的字典序排序操作的完整攻略: 1. 根据键(Key)排序 1.1 实现方式一 Map<String, String> map = new HashMap<>(); map.put("b", "2"); map.put("c", "3&quo…

    算法与数据结构 2023年5月19日
    00
  • 利用explain排查分析慢sql的实战案例

    对于利用explain排查分析慢SQL的实战案例,可以按照以下步骤进行。 1. 获取慢SQL 首先要获取慢SQL,即执行时间较长的SQL语句。可以在MySQL的慢查询日志中查看,也可以使用一些监控工具进行查看。获取慢SQL之后,可以通过一些工具进行格式化,让其更加可读。 2. 使用explain解析SQL 在获取慢SQL之后,接下来就是使用explain对S…

    算法与数据结构 2023年5月19日
    00
  • 基于Go语言实现冒泡排序算法

    基于Go语言实现冒泡排序算法 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行,因而得名“冒泡排序”。该算法因其简单的实现方式和易于理解的原理而广泛应用。 冒泡排序算法实现方式 冒泡排序的算法原理如下: 比较相邻的元素。如果第一个…

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