C++排序算法之插入排序

C++排序算法之插入排序

插入排序是一种简单且直观的排序算法,在实现上也比较容易。它的基本思路是把一个待排序的序列分成两个部分:已排序部分和未排序部分,然后从未排序部分取出一个元素插入到已排序部分的合适位置,作为新的已排序部分。

算法过程

插入排序的过程可以用以下步骤概括:

  1. 将序列的第一个元素看成已排序部分,其他元素看成未排序部分
  2. 从未排序部分选择一个元素,插入到已排序部分的合适位置
  3. 重复步骤2,直到未排序部分为空

具体来说,每次取出未排序部分的第一个元素,循环与已排序部分的元素比较,并插入到合适位置。比较的方式可以选择从前往后比较,也可以从后往前比较,这里选择从前往后比较。

因为需要插入的元素必须始终与已排序部分进行比较,插入排序的时间复杂度取决于序列的初始状态。如果序列已经接近有序,插入排序的速度很快;如果序列完全无序,插入排序的速度则很慢,需要比较$n(n-1)/2$次。

代码示例

以下是使用C++实现插入排序的代码:

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

        /* 移动已排序部分的元素,为key腾出插入位置 */
        while (j >= 0 && arr[j] > key) { 
            arr[j + 1] = arr[j]; 
            j = j - 1; 
        } 
        arr[j + 1] = key; 
    } 
} 

这段代码使用了一个for循环,每次将未排序部分的第一个元素插入到已排序部分的正确位置。在插入过程中,需要不断地比较已排序部分的元素和未排序部分的元素,直至找到合适的位置。在比较过程中,为了腾出插入位置,需要不断地将已排序部分的元素向右移动。

以下代码是使用插入排序实现对整型数组排序的示例:

#include <iostream>
using namespace std;

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

int main() {
    int arr[] = { 5, 2, 4, 6, 1, 3 };
    int size = sizeof(arr) / sizeof(arr[0]);

    insertionSort(arr, size);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

在这个示例中,我们首先定义了一个包含六个元素的整型数组。然后调用insertionSort函数对这个数组进行排序,最后输出排好序的结果。

另一个示例

以下是另外一个示例,使用插入排序对字符串数组进行排序:

#include <iostream>
#include <cstring>
using namespace std;

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

int main() {
    string arr[] = { "b", "a", "d", "c", "f", "e" };
    int size = sizeof(arr) / sizeof(arr[0]);

    insertionSort(arr, size);

    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

这个示例与上一个示例类似,只不过将整型数组改成了字符串数组。insertionSort函数的实现与之前相同,我们只需要将string类型的变量换成整型变量即可。

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

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

相关文章

  • PHP快速排序算法实现的原理及代码详解

    下面我就详细讲解一下“PHP快速排序算法实现的原理及代码详解”的完整攻略。 一、快速排序算法的原理 快速排序(Quicksort)是非常常用的排序算法,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的记录关键字小,然后分别对这两部分记录继续进行排序,重复上述过程,直到整个序列有序为止。 具体流程如下: 从数列中挑出一…

    算法与数据结构 2023年5月19日
    00
  • C语言每日练习之选择排序

    C语言每日练习之选择排序 选择排序算法简介 选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思路是在未排序的数列中,从前往后依次选择最小的数,和第一个数进行交换,然后在剩余的数列中从前往后选择最小的数,与第二个数进行交换,直到选择到最后一个数为止。 选择排序的时间复杂度为O(n²),属于较慢的排序算法,但是它的实现简单易懂,不需要额…

    算法与数据结构 2023年5月19日
    00
  • 使用C语言求解扑克牌的顺子及n个骰子的点数问题

    “使用C语言求解扑克牌的顺子及n个骰子的点数问题”,我们可以分别来看一下。 1. 求解扑克牌的顺子 首先我们需要了解什么是扑克牌的顺子,即五张连续的牌,如”10 J Q K A”等。因为一副牌里,最小的牌为2,最大的牌为A(即1),所以任何5张牌中最大和最小的差值不能超过4。 我们可以先将5张牌进行排序,然后用最大牌和最小牌计算差值,再去除所有大小王,如果差…

    算法与数据结构 2023年5月19日
    00
  • c++数组排序的5种方法实例代码

    C++ 数组排序的 5 种方法实例代码 本篇文章介绍了使用 C++ 实现数组排序的 5 种方法,包括冒泡排序、选择排序、插入排序、希尔排序和快速排序。下面我们就分别详细阐述各种排序方法的实现。 冒泡排序 冒泡排序的基本思想是比较相邻的两个元素,如果顺序错误就交换位置。我们重复地执行这个过程,直到排序完成。示例代码如下: void BubbleSort(int…

    算法与数据结构 2023年5月19日
    00
  • 京东在数据挖掘方面对推荐技术的优化

    京东在数据挖掘方面对推荐技术的优化 京东是中国著名的电商平台,一直在推进自己的推荐系统技术,以提高用户交互体验和推广效果。在数据挖掘方面,京东对推荐技术进行了一系列的优化,包括以下几个方面: 1. 数据收集和处理 京东首先通过大数据技术收集和整理用户的行为数据,包括购买、浏览、评价等多个方面。同时利用机器学习技术进行数据建模,包括对用户画像、商品描述等方面的…

    算法与数据结构 2023年5月19日
    00
  • PHP哈希表实现算法原理解析

    PHP哈希表实现算法原理解析 什么是哈希表 哈希表又称为散列表(Hash Table),是根据关键码值(Key-Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到 Hash 表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(Hash Function),存放记录的数组叫做哈希表(Hash Table)。 PHP哈希表实现…

    算法与数据结构 2023年5月19日
    00
  • C#递归算法之分而治之策略

    C#递归算法之分而治之策略 简介 递归算法是一种非常重要的算法,使用递归算法可以解决很多复杂的问题。分而治之是一种常用的递归思路,即将一个问题分成若干个子问题,分别解决,然后将它们的解合并起来得到原问题的解。 分而治之策略 分而治之策略就是将一个复杂的问题分成若干个相同或相似的子问题,并且逐个解决这些子问题,最后统合起来得到原问题的解。这种算法适用于一些可分…

    算法与数据结构 2023年5月19日
    00
  • C#中使用基数排序算法对字符串进行排序的示例

    下面是使用基数排序算法对字符串进行排序的完整攻略。 什么是基数排序算法? 基数排序算法是一种非比较排序算法,它先按照低位进行排序,然后再按照高位进行排序。在对一组字符串进行排序时,可以先按照字符串的最后一位进行排序,然后再按照倒数第二位进行排序,逐步地按照每一位进行排序,最终完成整组字符串的排序。 C#中实现基数排序算法的步骤 在 C# 中实现基数排序算法需…

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