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语言超详细梳理排序算法的使用 概述 本攻略旨在介绍C语言中常见的排序算法的实现与使用方法。排序算法是计算机科学中非常重要的一部分,它们可以对大量的数据进行快速的排序,是各类计算机系统与应用中的重要组成部分,对于编写具有高效性能的代码具有非常重要的作用。对于初学者,学习排序算法不仅可以提高编程能力,同时也是学习算法与数据结构的入门之路。 本文介绍以下常见的排…

    算法与数据结构 2023年5月19日
    00
  • c语言排序之归并排序(递归和非递归)

    下面我来为你详细讲解“C语言排序之归并排序(递归和非递归)”的完整攻略: 什么是归并排序 归并排序是一种基于分治策略的排序算法,其基本思想是将原始数据分成若干个小的子序列,然后将这些小的子序列两两合并成为较大的子序列,直到最终合并成为完整的有序序列。 归并排序可以采用递归和非递归两种方式实现。 归并排序递归实现 归并排序的递归实现相对容易理解,可以通过以下步…

    算法与数据结构 2023年5月19日
    00
  • c++深入浅出讲解堆排序和堆

    C++深入浅出讲解堆排序和堆 堆的定义 堆是一种特殊的树形数据结构,它满足以下两个特性: 堆是一个完全二叉树(Complete Binary Tree); 堆中每个节点的值都大于等于(或小于等于)其左右子节点的值。 可以看出,堆一般分为两种类型:大根堆(Max Heap)和小根堆(Min Heap)。大根堆的每个节点的值都大于等于其左右子节点的值,小根堆则相…

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

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

    算法与数据结构 2023年5月19日
    00
  • C语言基本排序算法之插入排序与直接选择排序实现方法

    C语言基本排序算法之插入排序与直接选择排序实现方法 本文将介绍C语言中两种常见的基本排序算法:插入排序和直接选择排序。我们将会详细阐述它们的实现方法,并提供示例代码来帮助理解和实践。 插入排序 插入排序是一种简单而常见的排序算法,它将待排序的数列分成已排序和未排序两部分,初始时已排序部分只包含一个元素,随着算法的运行,每次从未排序部分中取出第一个元素插入到已…

    算法与数据结构 2023年5月19日
    00
  • C语言排序算法之冒泡排序实现方法【改进版】

    C语言排序算法之冒泡排序实现方法【改进版】可以采用双层循环的方式实现。接下来,我将为您详细介绍该排序算法的实现方法。 冒泡排序的基本思路 冒泡排序的基本思路是:通过比较相邻的元素,将小的元素交换到前面,大的元素交换到后面。在第一轮排序时,第一个元素与第二个元素进行比较,若第一个元素比第二个元素大,则将两个元素交换位置。接下来,第二个元素与第三个元素进行比较,…

    算法与数据结构 2023年5月19日
    00
  • C语言 扩展欧几里得算法代码

    下面我来为你详细讲解一下“C语言 扩展欧几里得算法代码”的完整攻略。 什么是扩展欧几里得算法? 扩展欧几里得算法是求解两个整数 a、b 的最大公约数(Greatest Common Divisor,简称 GCD)的一种算法。该算法可以不仅计算出最大公约数,还可以得到一组关于 a、b 的贝祖等式的整数解和一些运算过程。 算法流程 扩展欧几里得算法的流程如下: …

    算法与数据结构 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
合作推广
合作推广
分享本页
返回顶部