C++插入排序算法实例详解

C++插入排序算法实例详解

什么是插入排序算法?

插入排序算法是一种简单直观的排序算法,其基本思想是将待排序的数据插入已排序序列的合适位置,以达到排序的目的。该算法的时间复杂度为 O(N^2),适用于数据量较小的排序场景。

插入排序算法的基本步骤

插入排序算法的基本步骤可以归纳为以下三个:

  1. 将待排序序列的第一个元素视作已排序序列,将后面的元素逐个与已排序序列中的元素比较,并将其插入合适的位置。

  2. 依次将待排序序列中的其他元素插入已排序序列的恰当位置,直到待排序元素全部插入完成。

  3. 完成排序,输出排好序的结果。

C++插入排序算法实例

下面是一段使用 C++ 语言实现插入排序算法的代码:

#include<iostream>
using namespace std;

void insertionSort(int arr[], int n)
{
    int i, j, key;
    for (i = 1; i < n; i++)
    {
        key = arr[i];
        j = i - 1;

        while (j >= 0 && arr[j] > key)
        {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main()
{
    int arr[] = { 12, 11, 13, 5, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);

    insertionSort(arr, n);

    cout << "排序后的数组:" << endl;
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";

    return 0;
}

该程序中,insertionSort() 函数是实现插入排序的核心代码,程序首先定义了一个待排序的数组 arr,接着调用 insertionSort() 函数进行排序。排序结束后,程序输出排序后的数组。

示例说明

示例一

假设有一个待排序序列 arr[]={5,8,2,7,1,3,6,4},使用插入排序算法后,得到的排序序列为 1,2,3,4,5,6,7,8

详细过程:

  1. 第一次排序后得到 arr[]={5,8,2,7,1,3,6,4},此时已排序部分只包含一个元素 5

  2. 将待排序部分的下一个元素 8 与已排序部分的唯一元素 5 进行比较,发现 8 大于 5,故将 8 插入已排序部分的最后面,此时已排序部分变为 5,8

  3. 将待排序部分的下一个元素 2 与已排序部分中的元素进行比较,先将 8 向后移一位,再将 5 向后移一位,将 2 插入到已排序序列的第一位,此时已排序部分变为 2,5,8

  4. 依次对剩余元素进行插入排序,最终得到排序序列为 1,2,3,4,5,6,7,8

示例二

假设有一个待排序序列 arr[]={1,2,3,4,5},使用插入排序算法后,得到的排序序列与原序列相同,为 1,2,3,4,5

详细过程:

  1. 第一次排序后得到 arr[]={1,2,3,4,5},此时已排序部分包含整个待排序序列。

  2. 算法直接结束,输出原序列即可。

总结

插入排序算法是一种简单高效的排序算法,虽然其时间复杂度较高,但在数据规模较小的情况下表现较好。在实际开发中,需要根据不同的场景选择不同的排序算法,合理选取排序算法可以极大地提高程序的运行效率。

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

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

相关文章

  • C语言 详细解析时间复杂度与空间复杂度

    C语言详解时间复杂度与空间复杂度 什么是时间复杂度和空间复杂度? 在计算机科学中,时间复杂度和空间复杂度用于衡量算法执行效率的指标。 时间复杂度指算法运行所需的时间,一般用大O记法表示,例如O(n)、O(n²),其中n代表输入数据规模。 空间复杂度指算法运行所需的存储空间,也一般用大O记法表示,例如O(n)、O(n²),其中n代表输入数据规模。 时间复杂度示…

    算法与数据结构 2023年5月19日
    00
  • JS实现的合并两个有序链表算法示例

    下面为您详细讲解JS实现的合并两个有序链表算法示例的完整攻略。 什么是合并两个有序链表? 合并两个有序链表,顾名思义就是将两个有序链表合并成一个有序链表。具体实现过程是将链表A和链表B按照顺序依次比较,将较小的节点插入到一个新的链表C中,直至A、B中有一个链表被遍历结束,另一个链表中剩余的节点则直接插入到链表C的最后。 示例如下: 链表A 链表B 合并后的链…

    算法与数据结构 2023年5月19日
    00
  • C/C++浅析邻接表拓扑排序算法的实现

    C/C++浅析邻接表拓扑排序算法的实现 什么是拓扑排序 在图论中,若存在一种拓扑序列,使得对于任意的有向边(u,v),u在序列中都在v的前面,则称该图为拓扑排序,该序列称为拓扑序列。拓扑排序是一个有向无环图(DAG, Directed Acyclic Graph)的一种线性序列。 拓扑排序算法的实现 拓扑排序算法的实现一般基于邻接表,其核心思路为:先将所有入…

    算法与数据结构 2023年5月19日
    00
  • PHP面试常用算法(推荐)

    对于“PHP面试常用算法(推荐)”这一话题,我可以给出一个较为完整的攻略,如下: PHP面试常用算法(推荐) 1.算法的定义 算法(Algorithm)是指解决问题的方法和步骤,也就是解决问题的具体步骤和策略。算法包括很多种,比如常见的排序算法、查找算法、递归算法等等。在 PHP 的面试中,算法是一个非常重要的考察内容,因此熟练掌握各种算法的基本原理和实现方…

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

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

    算法与数据结构 2023年5月19日
    00
  • Js Snowflake(雪花算法)生成随机ID的实现方法

    Js Snowflake(雪花算法)生成随机ID的实现方法 介绍 雪花算法是Twitter开源的一种简单高效、生成唯一ID的算法,可以用于解决数据分布式系统中的ID生成器。本文将介绍使用Js实现雪花算法生成随机ID的完整方法。 实现 引入 首先,我们需要引入雪花算法的js库文件snowflake.js,并在页面中引入 <script src=&quot…

    算法与数据结构 2023年5月19日
    00
  • C++中二叉堆排序详解

    C++中二叉堆排序详解 什么是二叉堆排序 二叉堆是一种特殊的二叉树,它有两个特性: 根节点的键值是所有节点中最小/最大的; 对于节点i的键值一定不大/小于它的父节点i/2。 根据第二个规则,我们可以对于任何一个节点i,以i为根的子树都是一个小根堆/大根堆。将二叉堆中最小/最大的根节点取出,然后将最后一个节点放到根位置,再对根节点进行一次向下调整的操作,就可以…

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

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

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