排序算法——插入排序

news2024/11/15 23:08:51

一、插入排序概念

直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、插入排序原理

1. 初始化:将数组的第一个元素视为已排序的部分。

2. 遍历:从第二个元素开始,每次选择一个元素,将其插入到已排序部分的适当位置。

3. 比较和移动:为了找到新元素的正确位置,从后向前比较新元素与已排序部分的元素,如果新元素较小,则将较大的元素向后移动一位。

4. 重复:重复上述过程,直到所有元素都被插入到已排序部分。

三、代码示例

#include <stdio.h>

void insertionSort(int *arr, int size)
{
    int key = 0;
    int i, j;
    for (i = 1; i < size; i++)
    {
        key = arr[i];               /*当前待插入的元素*/
        for (j = i - 1; arr[j] > key && j >= 0; j--)  /*将大于key的元素向后移动一位*/
        {
            arr[j + 1] = arr[j];
        }
        arr[j + 1] = key;
    }
}

void print(int *arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr[] = {5, 4, 2, 3, 1, 6, 0};
    int size = sizeof(arr) / sizeof(int);
    printf("插入排序前的数组:");
    print(arr, size);
    printf("插入排序后的数组:");
    insertionSort(arr, size);
    print(arr, size);
    return 0;
}

运行结果:

 

四、插入排序复杂度

时间复杂度

最好情况:当输入数组已经是排序好的时候,时间复杂度为O(n)。

平均情况和最坏情况:当输入数组是随机或逆序的时候,时间复杂度为O(n²)。

空间复杂度

直接插入排序是原地排序算法,空间复杂度为O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu、cpolar、api开启映射之路

1.国内cpolar安装 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash或 cpolar短链接安装方式&#xff1a;(国外使用&#xff09; curl -sL https://git.io/cpolar | sudo bash2.查看版本号&#xff0c;正常显示即为安装成功 cpolar …

HR系统怎么选?2024年10大热门工具评测

本文中介绍的工具有&#xff1a;Moka、名才MCHR、HiHR、华天动力HRM、红海eHR、易路eRoad、宏景HJSOFT、Gusto、Zenefits、BambooHR。 在当今竞争激烈的商业环境中&#xff0c;找到一个适合企业的HR系统可能是一个令人头疼的问题。市面上的HR工具琳琅满目&#xff0c;各有千秋&…

Django 自定义用户 VS 用户资料

Django是一个流行的Web框架&#xff0c;它提供了一套完整的用户认证系统&#xff0c;其中包括内置的User模型用于存储基本的用户信息&#xff0c;如用户名、密码等。然而&#xff0c;如果我们需要更详细的用户资料管理&#xff0c;比如添加更多的字段或者自定义验证规则&#x…

Linux 常见的冷知识集锦

一、前言 本文旨在记录那些常见的Linux概念和名词&#xff0c;但这些又没经常直接使用到&#xff0c;更多在底层运行&#xff0c;见过却又不是特别清楚的碎片知识&#xff0c;以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX&#xff08;Portable Operating S…

股票技术指标 RSI KDJ MACD

具体指标解释&#xff0c;大模型都有&#xff0c;只说作用 RSI&#xff08;Relative Strength Index&#xff0c;相对强弱指数&#xff09; 超买和超卖水平&#xff1a;通常情况下&#xff0c;RSI值超过70表示市场可能超买&#xff0c;而低于30表示可能超卖。这并不意味着价格…

数据结构:顺序二叉树(堆)

目录 前言 一、堆的实现 1.1 头文件 1.2 堆的初始化及销毁 1.3 堆的插入 1.4 堆的删除 1.5 取堆顶数据和判空 前言 前面我们讲了二叉树有顺序结构和链式结构&#xff0c;今天就来讲一下顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间…

HTTP请求的流转路径,从Tomcat到SpringMVC

本文主要讲一下&#xff0c;一个HTTP请求在后端服务的流转路径&#xff0c;Tomcat等一众servlet容器如何定义了Web应用的基础样貌&#xff0c;后来的MVC框架又是如何弱化了servlet的存在&#xff0c;改为自己实现请求派发的。 前些日子我写了十几篇文章来介绍Tomcat的架构&…

AI在医学领域:联邦学习 (FL) 在肿瘤学的应用综述

关键词&#xff1a;联邦学习 (Federated Learning, FL)、机器学习 (Machine Learning, ML)、肿瘤学 (Oncology)、数据隐私 (Data Privacy)、精准医疗 (Precision Medicine)、多模态 (Multi-modal) 肿瘤学正在经历快速的变革&#xff0c;这得益于机器学习&#xff08;ML&#xf…

tinymce字体为48px后再设置numlist数字列表导致前面的序号字体不对--【已解决】

问题描述&#xff1a; tinymce选择完大号字体&#xff0c;如48px&#xff0c;再选择数字列表&#xff0c;会导致数字列表的序号字体不对。 解决&#xff1a; 演示效果

【C语言篇】C语言常考及易错题整理DAY3

文章目录 选择题整形提升与算术转换左移右移操作符操作符优先级与结合性后置指针变量基本知识 编程题最大连续1的个数完全数计算单词倒排面试题.珠玑妙算两数之和 选择题 整形提升与算术转换 声明以下变量&#xff0c;则表达式: ch/i (f*d – i) 的结果类型为&#xff08; &…

Fal.ai Flux 1-Pro/Viva.ai/哩布哩布AI:AI绘图部分免费工具+原图提示词Prompt

目录 #1 找软件 #2 懂提示词 #3 更难的一步&#xff0c;会英文 我个人认为&#xff0c;想要玩文生图&#xff0c;你要会3个步骤&#xff1a; #1 找软件 主流文生图软件&#xff1a;Midjourney、Stable Diffusion、Dall-E 3 巧了&#xff0c;我用的都是小众、免费的画笔工…

Linux 错误码

目录 一、概述二、含义三、错误处理函数1、IS_ERR2、strerr、perror 一、概述 在 Linux 系统中&#xff0c;错误码是用来表示操作系统运行过程中发生的错误的数字代码。错误码通常由负数表示&#xff0c;0 表示成功&#xff0c;正数表示警告或其他非致命错误。 为了开发者更好…

查询大数据信用需要收费吗?哪个平台好一点?

随着大数据技术被运用到金融行业&#xff0c;不少申贷人都开始了解自己的大数据信用&#xff0c;在查询大数据信用的时候&#xff0c;查询大数据信用需要钱吗?哪个平台好一点?等问题是很多人都比较关心的问题&#xff0c;下面本文就详细为大家详解一下&#xff0c;希望对你了…

基于python的百度迁徙迁入、迁出数据分析(九)

副标题&#xff1a;从百度迁徙数据看——人口虹吸效应 人口虹吸效应&#xff1a;人口虹吸效应是指大城市或中心城市因其经济、文化、教育、医疗等资源的优势&#xff0c;吸引周边地区的人口、资本和其他资源向其集中的一种现象。这种效应在城市化进程中尤其明显&#xff0c;通…

公司起诉员工泄密难吗?如何搜寻有力的证据?专业审计软件助力,追责之路其实不难!

在企业管理中&#xff0c;员工泄密是一个严重的问题&#xff0c;不仅可能损害企业的商业利益&#xff0c;还可能对企业的声誉造成不可挽回的影响。然而&#xff0c;公司起诉员工泄密并非易事&#xff0c;需要满足严格的法律条件和程序&#xff0c;并面临证据收集与举证、法律程…

10款好用的文件加密软件排行榜,2024企业常用的文件加密软件

在数据安全日益受到重视的今天&#xff0c;文件加密软件已成为保护企业敏感信息的重要工具。以下是2024年企业常用的10款好用的文件加密软件排行榜&#xff0c;帮助你选择适合的工具来保护你的文件和数据。 1. 安秉加密软件 安秉加密软件提供用户友好的界面和强大的加密功能。…

使用 nginx 搭建代理服务器(正向代理 https 网站)指南

简介 正向代理 简介 在企业开发环境中&#xff0c;局域网内的设备通常需要通过正向代理服务器访问互联网。正向代理服务器充当中介&#xff0c;帮助客户端请求外部资源并返回结果。局域网内也就是俗称的内网&#xff0c;局域网外的互联网就是外网&#xff0c;在一些特殊场景内…

unity 画线写字

效果 1.界面设置 2.涉及两个脚本UIDraw.cs和UIDrawLine.cs UIDraw.cs using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class UIDraw : MonoBehaviour, IPointerEnterHandler, IPointerEx…

【大数据】什么是数据架构?

目录 一、什么是数据架构&#xff1f; 二、数据架构的发展历程 1. 早期阶段&#xff08;1960年代-1970年代&#xff09; 2. 关系数据库的兴起&#xff08;1970年代-1980年代&#xff09; 3. 数据仓库和数据挖掘&#xff08;1980年代-1990年代&#xff09; 4. 大数据和NoSQL&…

计算机基础|数据溢出

一、概念 在类似C这样的非高级语言存在数值溢出问题&#xff0c;简单概括&#xff1a;高位数据丢失被低位数据占据位置。 二、举例 2.1 以C语言 for循环为例 /*int8_t value range from -128 to 127*/int8_t input;for (input 124; input < 130; input) {printf("%…