c语言排序算法之五(插入排序)

前言

以下内容是被验证可以有效理解插入排序,代码也较容易理解。如果你发现还有很多需要增加的,欢迎留言

为什么要单独写排序算法这一系列,看过一些贴子普遍篇幅较长。看完还依旧云里雾里,难以直观理解原理及整个过程。代码永远是基于理解的基础上才能实现。

执行过程能动画展示需方便清晰,同时需具备单步调试,方便没理解的可以回看。

语言比较推荐c语言,高级语言库函数较多,人都有惰性思维,将自己置身于环境中训练也是至关重要。

每日佳句: 你生来就一无所有,何惧从头再来。

实现原理

插入排序算法的原理是将待排序的元素逐个插入到已排序序列中的适当位置,从而逐步构建有序序列。其过程可描述如下:

  • 初始时,将第一个元素视为已排序序列。
  • 从第二个元素开始,将其与已排序序列中的元素逐个比较,并插入到正确的位置上。
  • 每次从未排序部分选择一个元素,与已排序部分的元素进行比较,当小于已排序部分的元素时,将该元素逐步向后移动,为新元素腾出空间。
  • 重复上述过程,直到所有元素都插入到有序序列的适当位置,此时整个数组变为有序。

插入排序在实现上是原地排序,只需用到O(1)的额外空间。

动画展示过程(Insertion Sort)

Comparison Sorting Visualization

具体代码实现

#include <stdio.h>void insertionSort(int arr[], int n) {int i, j, key;for (i = 1; i < n; i++) {key = arr[i];j = i - 1;/* Move elements of arr[0..i-1], that are greater than key,to one position ahead of their current position */while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j = j - 1;}arr[j + 1] = key;}
}void printArray(int arr[], int size) {int i;for (i = 0; i < size; i++)printf("%d ", arr[i]);printf("\n");
}int main() {int arr[] = {12, 11, 13, 5, 6};int n = sizeof(arr) / sizeof(arr[0]);insertionSort(arr, n);printf("Sorted array: \n");printArray(arr, n);return 0;
}

QA:待定

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

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

相关文章

通过swagger在线地址生成前端接口调用

下载模块 npm install fs npm install path-browserify npm install http 新建autoGen.js文件 const fs require(fs); const path require(path-browserify); let apiData {} // 访问swagger.json的数据 const http require(http);const apiUrl http://localhost:8001/sw…

[安洵杯 2019]JustBase(替换表)

题目&#xff1a; 我们看到题目是一些杂乱的字母和符号&#xff0c;但从题目和末尾的两个号&#xff0c;我们猜测是base64加密&#xff0c;但题目未出现1-9数字&#xff0c;而base64不包含!#$%等字符&#xff0c;所以我们考虑将字符!#$%按照键盘替换成数字1-9. 替换代码如下&a…

基于光伏电站真实数据集的深度学习预测模型(Python代码,深度学习五个模型)

效果视频链接&#xff1a;基于深度学习光伏预测系统&#xff08;五个模型&#xff09;_哔哩哔哩_bilibili 界面设计 注册界面 登录界面 主界面 展示界面 1.数据集来源 The SOLETE dataset 这里分别保存了不同间隔采样时间表格 1min是以1min 间隔采集的数据集 数据集截图&…

Java 中的 pyftpdlib 替代品

在 Java 中&#xff0c;有一些替代方案可以用来实现 FTP 服务器功能&#xff0c;类似于 Python 中的 pyftpdlib。目前我们常用的就是三种替换方案&#xff0c;这里需要根据自己的项目需求选择合适的方法。 1、问题背景 在 Java 环境下寻找一款与 pyftpdlib 类似的 FTP 服务器库…

企业开发基础--数据库

今天完成了数据库学习的全部内容&#xff0c;在事务&#xff0c;索引&#xff0c;范式中要有个人逻辑上的理解&#xff0c;也算是卡着点完成了大多数预期&#xff0c;还有一个Java游戏未完成&#xff0c;会后续补上。 之后的一周要完成34道数据库练习题以及JDBC&#xff0c;学…

ip地址快速切换软件是什么

ip地址快速切换软件是什么&#xff1f;随着互联网的发展&#xff0c;IP地址变得愈发关键。对于网络工作者、营销人员和游戏玩家&#xff0c;频繁更换IP地址成了日常工作需求。为满足这一需求&#xff0c;IP地址快速切换软件如虎观代理IP软件应运而生&#xff0c;它为用户提供了…

避雷!7.7分,新增1区TOP被标记On Hold,5本已被踢除!

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…

低代码技术的深度应用:物资管理的创新与效率提升

引言 在当今企业运营中&#xff0c;物资管理扮演着至关重要的角色。无论是制造业、零售业还是服务行业&#xff0c;有效的物资管理都是确保业务正常运转和持续发展的关键。然而&#xff0c;随着企业规模的扩大和业务的复杂化&#xff0c;物资管理也变得越来越复杂。企业需要管…

闭包(常见)

在JavaScript中&#xff0c;闭包&#xff08;Closure&#xff09;是一个非常重要的概念&#xff0c;它指的是那些能够访问自由变量的函数。自由变量是指在函数中使用的&#xff0c;但既不是函数参数也不是函数的局部变量的变量。 闭包的构成条件 函数作为返回值&#xff1a;一…

西藏自治区建设工程系列职称评价标准

西藏自治区建设工程系列职称评价标准评审要求关于印发《西藏自治区建设工程系列职称评价标准&#xff08;试行&#xff09;》&#xff08;修订稿&#xff09;的通知评审通知关于开展2023年度西藏自治区建设工程系列高级工程师职称评审申报工作的通知类别基本条件业绩成果备注工…

Day05-JavaWeb开发-请求响应(postman工具/参数/案例)分层解耦(三层架构/IOC-DI引入)

1. 请求响应 1.1 概述 1.2 请求-postman工具 1.3 请求-简单参数&实体参数 1.3.1 简单参数 1.3.2 实体参数 1.4 请求-数组集合参数 1.5 请求-日期参数&json参数 1.6 请求-路径参数 1.7 响应-ResponseBody 1.8 响应-案例 2. 分层解耦 2.1 三层架构 2.2 分层解耦(IOC-D…

流畅的python-学习笔记_序列

概念 抽象基类&#xff1a;ABC, Abstract Base Class&#xff0c;ABC还有一个概念&#xff0c;是一个编程语言 序列 内置序列类型 分类 可分为容器类型和扁平类型 容器类型有list&#xff0c; tuple&#xff0c; collections.deque等&#xff0c;存储元素类型可不同&…

实验九 Java 语言网络通信程序设计练习(课内实验)

一、实验目的 本次实验的主要目的是练习网络通信程序的设计方法&#xff0c;并掌握计算机网络基 础知识、Java语言网络通信程序类库的结构和使用方法。 二、实验要求 1. 认真阅读实验内容&#xff0c;完成实验内容所设的题目。 2. 能够应用多种编辑环境编写Java语言源程序…

南京观海微电子---电源,从微观角度观看电功率是怎么产生

从微观角度看看无功功率是怎么产生的&#xff0c;在此之前&#xff0c;我们得先知道引起无功功率的元器件是储能器件&#xff0c;主要是电感和电容。 首先&#xff0c;在宏观上&#xff0c;我们知道电感能导致电压超前电流90&#xff0c;可从如下公式推出&#xff1a; 由此可以…

强到离谱!AI绘画Stable Diffusion让商业换装如此简单!AI一键换装,AI绘画教程

今天给大家介绍一款可以让 Stable Diffusion 轻松实现AI一键换装的超强插件—— Inpaint Anything &#xff0c;它能精准地替换图片中的指定部位&#xff0c;不仅上手简单&#xff0c;而且简直强到离谱&#xff01; 首先&#xff0c;我们要下载这个插件。插件可看文末扫描获取…

【ARM Cortex-M3指南】7:嵌套向量中断控制器和中断控制

文章目录 七、嵌套向量中断控制器和中断控制7.1 嵌套向量中断控制器概述7.2 基本的中断配置7.2.1 中断使能和清除使能7.2.2 中断设置挂起和清除挂起7.2.3 优先级7.2.4 活跃状态7.2.5 PRIMASK和FAULTMASK特殊寄存器7.2.6 BASEPRI特殊寄存器7.2.7 其他异常的配置寄存器 7.3 设置中…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref&#xff1a;6.8. 长短期记忆&#xff08;LSTM&#xff09; — 《动手学深度学习》 文档 (gluon.ai)

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

一分钱不花从HTTP升级到HTTPS

HTTP升级到HTTPS是一个涉及安全性和技术实施的过程&#xff0c;主要目的是为了提升网站数据传输的安全性&#xff0c;防止数据被窃取或篡改。以下是一些关于从HTTP升级到HTTPS的技术性要点和步骤概述&#xff0c;结合上述信息资源&#xff1a; 一、理解HTTPS的重要性 HTTPS (…

nodejs postgresql

pgsql.js const { Client } require(pg); const config {host: "127.0.0.1",database: "postgres",user: "postgres",password: "postgres",port: 5432, // 默认的PostgreSQL端口号 }const pg require("pg"); const poo…