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

devtools/2024/11/13 10:09:51/

前言

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

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

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

语言比较推荐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.ppmy.cn/devtools/34326.html

相关文章

【Osek网络管理测试】[TG1_TC7]tError

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 测试tErrore时间参数是否正确 本处规定tError范围在[950…

「PHP系列」PHP MySQL 简介及运用

文章目录 一、PHP MySQL 简介二、MySQL安装三、相关链接 一、PHP MySQL 简介 PHP MySQL是一个结合了PHP和MySQL的组合&#xff0c;用于在Web应用程序中处理数据库操作。 MySQL&#xff1a; 定义&#xff1a;MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&…

微信IDE vscode插件:获取插件位置,并打开文件

背景 有没有觉得在微信开发工具里面添加一些插件可以很方便。因为微信IDE的编辑本身是依赖vscode开发&#xff0c;所以编写vscode插件自然可以在微信IDE使用。这样做好处就是可以满足到自己一些开发使用习惯。 1.获取插件的目录位置 那么如何获取插件里面的目录&#xff0c;…

Spring IoCDI

一.引言 1.什么是Spring 前面我们说Spring是一个开源框架&#xff0c;它让我们的开发更为简单&#xff0c;它支持广泛的应用场景&#xff0c;有活跃庞大的社区。但这样说还是很抽象。今天我们就对他进行具象的描述 一句话说&#xff0c;Spring就是包含了众多工具的IoC容器。…

通用代码审查清单

通用代码审查清单是一个确保代码质量、可读性、可维护性和遵循最佳实践的重要工具。 以下是一个汇总的审查清单&#xff0c;结合了多个来源的信息&#xff0c;适用于多种编程语言和项目&#xff1a; 功能实现 • 代码是否实现了设计文档或需求规格说明中规定的所有功能&…

Dragonfly 拓扑的路由算法

Dragonfly 拓扑的路由算法 1. Dragonfly 上的路由 (1)最小路由(2)非最小路由 2. 评估 Dragonfly 拓扑的路由算法 John Kim, William J. Dally 等人在 2008 年的 ISCA 中提出技术驱动、高度可扩展的 Dragonfly 拓扑。而文章中也提到了 针对 Dragonfly 拓扑的路由算法。本文对…

还有谁……想知道“线下与线上布局之间的本质区别”

还有谁……想知道 线下与线上布局之间的本质区别 hello,亲爱的你们好.… 我是你们的好朋友,正博,今天是非常特殊的一天,给每一位读者准备了一份特殊的神秘礼物…… 在分享【特殊礼物】之前,请允许我分享一下《线下营销与线上销售的9大核心差异》…… 1、注意力; 2、销…

探索设计模式的魅力:分布式模式让业务更高效、更安全、更稳定

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索分布式模式之旅✨ 在数字化时代&#xff0c;企业面临着前所未有的挑战和机遇。…