排序与算法:插入排序

news/2025/2/22 19:40:07

执行效果
插入排序的执行效果是这样的:

呃……看不懂吗?没关系,接着往下看介绍 

算法介绍
插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用原地排序(即只需用到 O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
如果对插入排序的效率不是很满意,还可以看下它的改进版:希尔排序

算法档案
时间复杂度:O(n2)
最优时间复杂度:O(n)
平均时间复杂度:O(n2)
空间复杂度:总共 O(n),需要辅助空间 O(1)
稳定性:稳定

算法步骤
从第一个元素开始,该元素可以认为已经被排序

  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置后
  • 重复步骤 2~5,直到所有元素排序完毕

算法实现

#include <stdio.h>

void insertion_sort(int array[], int length);

void insertion_sort(int array[], int length)

{

        int i, j, temp;

        for (i = 1; i < length; i++)
        {
                temp = array[zxsq-anti-bbcode-i];
                j = i - 1;

                for ( ; j >= 0 && array[zxsq-anti-bbcode-j] > temp; j--)
                {
                        array[j+1] = array[zxsq-anti-bbcode-j];
                }
                array[j+1] = temp;
        }
}


int main(void)
{
        int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
        int i, length;

        length = sizeof(array) / sizeof(array[zxsq-anti-bbcode-0]);
        insertion_sort(array, length);
        printf("排序后的结果是:");

        for (i = 0; i < length; i++)
        {
                printf("%d ", array[zxsq-anti-bbcode-i]);
        }

        putchar('\n');

        return 0;
}

程序实现如下:


http://www.niftyadmin.cn/n/5862695.html

相关文章

计算机视觉(CV)

计算机视觉&#xff08;CV&#xff09;技术是人工智能&#xff08;AI&#xff09;领域的一个重要分支&#xff0c;其优势和挑战如下所示&#xff1a; 优势&#xff1a; 自动化处理&#xff1a;CV 技术可以自动处理大量图像和视频数据&#xff0c;实现高效的信息提取和分析&am…

毕业项目推荐:基于yolov8/yolo11的水稻叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

2024年职高单招或高考计算机类投档线

问题&#xff1a; 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答&#xff1a; 部分学校2024年职高单招或高考计算机类投档线如下&#xff1a; 湖南工业职业技术学院 职高单招&#xff1a;未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…

从被动应答到主动预见:客户服务的未来式变革

在数字化时代&#xff0c;客户服务的内涵和外延正在发生深刻变革。从传统的被动应答模式&#xff0c;到如今逐渐向主动预见转型&#xff0c;这一变化不仅体现了技术的进步&#xff0c;更是企业服务理念与客户期望之间不断磨合与升级的结果。 一、背景&#xff1a;从响应到预见的…

【机器学习】多元线性回归算法和正规方程解求解

多元线性方差和正规方差解 一、摘要二、多元线性回归介绍三、正规方程解的求解及代码实现 一、摘要 本文围绕多元线性回归的正规方程解展开&#xff0c;为初学者系统介绍了相关基本概念、求解方法、实际应用以及算法封装要点。 首先&#xff0c;深入阐释了正规方程解这一多元…

Linux中DataX使用第四期

简介 紧接着上期关于定义如何一个简单的插件&#xff0c;本期了解下关系型数据库的数据读取和数据写入。 环境 Windows10 (linux中命令相似&#xff0c;为了方面调试就用windows的)JDK(1.8以上&#xff0c;推荐1.8)Python(2或3都可以)Apache Maven (推荐3.x版本)IntelliJ IDEA…

天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制

天 锐 蓝盾终端安全管理系统以终端安全为基石&#xff0c;深度融合安全、管理与维护三大要素&#xff0c;通过对桌面终端系统的精准把控&#xff0c;助力企业用户构筑起更为安全、稳固且可靠的网络运行环境。它实现了管理的标准化&#xff0c;有效破解终端安全管理难题&#xf…

经典Embedding方法:Word2Vec与Skip-Gram算法)

引言 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;词嵌入&#xff08;Word Embedding&#xff09;是表示词汇语义的关键技术。2013年&#xff0c;Google提出的Word2Vec模型彻底改变了这一领域&#xff0c;其核心思想是通过无监督学习将单词映射到低维稠密向量空间…