插入排序C++

插入排序:有序列表的匠心打造

在计算机科学中,排序算法是不可或缺的一部分。插入排序,作为其中一种经典算法,以其朴素而直接的方式,展示了如何将无序数据转化为有序状态。本文将通过生动的实例,带你领略插入排序的魅力。

一、初识插入排序

想象一下,你是一名单排的舞者,站在一排舞伴的前面。随着音乐的节奏,你逐个邀请舞伴进入队列,并保持队列始终有序。这就是插入排序的核心思想。通过逐个比较和移动元素,插入排序确保数据始终保持有序状态。

二、实现插入排序

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

cpp 复制代码
#include <iostream>
using namespace std;

void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; 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;
    }
}

int main() {
    int arr[] = {12, 11, 13, 5, 6};
    int n = sizeof(arr)/sizeof(arr[0]);
    insertionSort(arr, n);
    cout << "Sorted array: \n";
    for (int i=0; i < n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

在这个示例中,insertionSort函数接受一个整数数组和数组的大小作为参数。通过从第二个元素开始遍历数组,我们将当前元素与它之前的元素进行比较。如果当前元素小于前面的元素,我们就将前面的元素后移一位,然后继续与前一个元素比较,直到找到合适的插入位置。这样,经过多次遍历后,数组就会变得有序。

三、插入排序的特点

  1. 稳定性:插入排序是一种稳定的排序算法,这意味着相等的元素在排序后保持其原始顺序。
  2. 时间复杂度 :在最坏的情况下,即输入数据完全逆序时,插入排序的时间复杂度为O(n2)。但对于一般情况,其平均时间复杂度为O(n2)。
  3. 空间复杂度:插入排序的空间复杂度为O(1),因为它只需要常数级别的额外空间。
  4. 适用场景:尽管插入排序在处理大规模数据集时效率较低,但对于小规模数据集或部分有序的数据集,它是一种简单且有效的选择。
相关推荐
阳明山水7 分钟前
Mamba与两阶段XGBoost的融合架构:面向间歇性需求的双路径预测框架
人工智能·深度学习·算法·机器学习·架构
水上冰石14 分钟前
【MuJoCo从入门到精通】第2章 第一个 MuJoCo 仿真
前端·人工智能·算法
wenyq717 分钟前
LeetCode 2904. Shortest and Lexicographically Smallest Beautiful String
算法·leetcode
维克兜率天29 分钟前
【维克】技术指标是什么:从均线到MACD的数学原理
人工智能·笔记·python·算法·量化
Messy create33 分钟前
【储能系统三大核心】
网络·stm32·单片机·算法·能源
一木 之林37 分钟前
C/C++ 面向对象编程(OOP)(进阶)
java·c语言·c++
sel_940 分钟前
【vLLM】vLLM 推理框架详解:从 PagedAttention 到生产级部署实战
人工智能·深度学习·算法·语言模型·框架·vllm
XR1234567881 小时前
办公大楼组网选型决策树:TCO 与三大品牌优劣对比总结
算法·决策树·机器学习
阳明山水1 小时前
Mamba路径如何建模长程时序依赖
人工智能·深度学习·算法·机器学习·架构
千谦阙听2 小时前
C++篇:类和对象(上)
开发语言·c++