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日

相关文章

  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)

    下面是Java中的数组排序方式的完整攻略。 1. 快速排序 快速排序是常用的一种排序算法,其时间复杂度为O(nlogn)。其基本思想是选择一个基准数,将数组分成左右两部分,比基准数小的放在左边,比基准数大的放在右边,然后再对左右两部分分别递归地进行快速排序。 Java中快速排序的实现基于Arrays类的sort方法。下面是一个示例代码: public sta…

    算法与数据结构 2023年5月19日
    00
  • C#实现冒泡排序算法的代码示例

    这里是详细讲解「C#实现冒泡排序算法的代码示例」的完整攻略。 算法简介 冒泡排序算法通过不断比较相邻的两个元素,将大的元素慢慢“冒泡”到数组的末尾,最终得到一个从小到大排列的有序数组。 计算机科学领域的算法大多数都有多种实现方式,这里我们介绍最基础的一种冒泡排序算法实现方式。 C# 实现代码示例 以下是 C# 实现冒泡排序算法的代码示例: public st…

    算法与数据结构 2023年5月19日
    00
  • C++递归实现选择排序算法

    实现选择排序算法的递归版本,步骤如下: 步骤1:找到最小值 首先,在要排序的数组中找到最小值,这个过程可以用for循环来实现。具体实现如下: // 找到数组中最小值的下标 int findMinIndex(int arr[], int startIndex, int endIndex) { int minIndex = startIndex; for (in…

    算法与数据结构 2023年5月19日
    00
  • PHP 数组排序方法总结 推荐收藏

    PHP 数组排序方法总结 推荐收藏 1. 为什么要学习数组排序 PHP 数组内置的排序函数,能够对数组的元素进行排序,满足不同场景下的需求。理解如何使用数组排序函数能够提高开发效率,并且能够帮助开发者写出更加高效、优雅的代码。 2. PHP 数组排序函数总结 PHP 数组的排序方法主要有以下几种: 2.1 sort() 对数组进行升序排列。 2.1.1 排序…

    算法与数据结构 2023年5月19日
    00
  • c语言快速排序算法示例代码分享

    首先,我们需要了解什么是快速排序。快速排序(QuickSort)是一种排序算法,其采用了分治的思想,并使用递归的方式处理数据集合。它的基本思想是从待排序的数据集合中选择一个元素作为分界点(一般称为pivot),然后将小于pivot的元素放到pivot左边,大于pivot的元素放到pivot右边,最后将pivot放到中间位置。然后递归处理pivot左右两边的子…

    算法与数据结构 2023年5月19日
    00
  • 7种排序算法的实现示例

    针对“7种排序算法的实现示例”的完整攻略,我会提供如下内容: 标题:7种排序算法的实现示例 这是一个一级标题,用于明确文章的主题。 简介:介绍7种排序算法的基本概念和使用场景 在这里我会简介7种排序算法的基本概念和使用场景,以帮助读者快速了解文章主题。 内容:讲解7种排序算法的实现示例 在这个章节,我会具体讲解7种排序算法的实现示例。其中,每种排序算法会按一…

    算法与数据结构 2023年5月19日
    00
  • js实现简单排列组合的方法

    下面是详细讲解 “js实现简单排列组合的方法” 的攻略。 排列组合的概念 排列就是由给定的n个元素中取出m(m ≤ n)个元素的所有排列总数的不同的排列数,用A(n, m)表示。例如,有3个元素A、B、C,则它们的排列有:ABC、ACB、BAC、BCA、CAB、CBA,共6种排列。 组合是指从n个不同元素中,取出m(m≤n)个元素的所有组合情况,用C(n,m…

    算法与数据结构 2023年5月19日
    00
  • 2020年新浪最新PHP试题和答案解析

    2020年新浪最新PHP试题和答案解析攻略 作为新浪最新的PHP试题,本门考试难度较高。以下是一些考试攻略以及答案解析。 试题分析 本次试题由多道选择题和编程题组成,主要考察PHP语言基础、框架使用、数据库操作等方面的知识。 选择题 本次选择题共15道,主要考察PHP基础语法、函数使用、面向对象编程、异常处理等方面的知识。 编程题 本次编程题共2道,主要考察…

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