大气红色网站/百度快照关键词推广

大气红色网站,百度快照关键词推广,嘉兴网站推广排名,做网站必须要公网ip目录 一、引言 二、代码整体结构 三、宏定义与头文件 四、插入排序函数(Insertsort) 函数作用 代码要点分析 五、希尔排序函数(ShellSort) 函数作用 代码要点分析 六、打印数组函数(PrintSort&#x…

目录

一、引言 

二、代码整体结构 

三、宏定义与头文件 

四、插入排序函数(Insertsort)

函数作用 

代码要点分析 

五、希尔排序函数(ShellSort) 

函数作用 

代码要点分析 

六、打印数组函数(PrintSort) 

 函数作用 

代码要点分析 

七、测试函数(TestSort)与主函数(main) 

 函数作用 

代码要点分析 

八、总结 


一、引言
 


在计算机科学领域,排序算法是非常基础且重要的内容。不同的排序算法有着各自的特点和适用场景。本文将基于给定的C语言代码,深入剖析插入排序(Insertion Sort)和希尔排序(Shell Sort)的实现过程,帮助读者更好地理解这两种排序算法的原理与应用。

 

作者主页:共享家9527-CSDN博客
二、代码整体结构
 


代码主要包含了插入排序函数、希尔排序函数、打印数组函数以及测试函数和主函数,整体结构清晰,便于理解和维护。下面我们对每个函数进行详细分析。


三、宏定义与头文件
 


c#define _CRT_SECURE_NO_WARNINGS
#include"Sort.h"


 
 #define _CRT_SECURE_NO_WARNINGS  这一宏定义的作用是在使用一些被认为可能存在安全风险的C标准库函数(如 scanf 、 strcpy 等)时,避免编译器产生警告信息。 #include"Sort.h"  表示包含自定义的头文件 Sort.h ,虽然在给出的代码中未看到该头文件的具体内容,但通常它会包含一些函数声明、类型定义等内容,方便代码的模块化管理。


四、插入排序函数(Insertsort)


c//插排
void Insertsort(int* a, int n){for (int i = 1;i < n;i++){int end = i - 1;int temp = a[i];while (end >= 0){if (temp < a[end]){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = temp;}
}


函数作用
 


插入排序函数的功能是对给定的整数数组进行排序,排序的基本思想是将一个数据插入到已经排好序的数组中的适当位置。
 


代码要点分析
 


1. 外层循环: for (int i = 1;i < n;i++)  从数组的第二个元素开始(因为第一个元素可以看作是已经排好序的子数组),依次将每个元素插入到前面已排序的子数组中的合适位置。
 
2. 初始化变量: int end = i - 1;  定义 end 变量表示已排序子数组的最后一个元素的下标。 int temp = a[i];  将当前待插入的元素暂存到 temp 变量中。
 
3. 内层循环: while (end >= 0)  当 end 大于等于0时,继续循环,即只要还在已排序的子数组范围内,就进行比较和移动操作。 if (temp < a[end])  如果待插入元素小于当前已排序子数组的最后一个元素,则将该元素向后移动一位,同时 end 减1,继续向前比较。当遇到不满足该条件的元素时,说明找到了待插入元素的合适位置,通过 break 跳出循环。
 
4. 插入操作: a[end + 1] = temp;  将暂存的待插入元素插入到合适的位置。
 


五、希尔排序函数(ShellSort)


c//希尔
void ShellSort(int* a, int n)
{int gap = 9;while (gap > 0){gap /= 2;for (int j = 0;j < gap;j++){for (int i = j;i < n - gap;i += gap){int end = i;int temp = a[i + gap];while (end >= 0){if (temp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = temp;}}}
}


 


函数作用
 


希尔排序是插入排序的一种改进版本,通过将数组按照一定的间隔( gap )进行分组,对每组分别进行插入排序,随着间隔逐渐减小,最终完成整个数组的排序。
 


代码要点分析
 


1. 初始间隔设置: int gap = 9;  定义初始的分组间隔,这里设置为9,不同的初始间隔可能会影响排序的效率。
 
2. 间隔调整循环: while (gap > 0)  当间隔大于0时,继续进行排序操作。每次循环中, gap /= 2;  将间隔逐渐缩小,直到间隔为1时,相当于进行一次普通的插入排序。
 
3. 分组循环: for (int j = 0;j < gap;j++)  对每个分组进行遍历,确保每个分组都能进行插入排序操作。
 
4. 组内插入排序循环: for (int i = j;i < n - gap;i += gap)  对每个分组内的元素进行插入排序,类似于插入排序的过程,但这里元素之间的比较和移动是按照间隔 gap 进行的。
 
5. 插入操作:与插入排序类似,通过比较和移动元素,将当前元素插入到分组内合适的位置。
 


六、打印数组函数(PrintSort)
 


cvoid PrintSort(int* a, int n)
{for (int i = 0;i < n;i++){printf("%d ",a[i]);}printf("\n");
}


 
函数作用
 


该函数的功能是将给定的整数数组按照顺序打印输出,方便查看数组在排序前后的状态。
 


代码要点分析
 


通过一个简单的 for 循环遍历数组,使用 printf 函数逐个输出数组元素,并在最后换行,使输出结果更加清晰易读。
 


七、测试函数(TestSort)与主函数(main)
 


cvoid TestSort()
{int arr[] = { 9,5,1,3,7,8,4,2,6,0 };int n = sizeof(arr) / sizeof(arr[0]);PrintSort(arr, n);Insertsort(arr, n);//ShellSort(arr, n);PrintSort(arr, n);
}int main()
{TestSort();return 0;
}


 
函数作用
 


 TestSort 函数用于测试排序算法的正确性,在函数内部创建一个测试数组,先打印数组的初始状态,然后调用插入排序函数对数组进行排序,再次打印排序后的数组状态。 main 函数则是程序的入口,调用 TestSort 函数来执行测试。
 


代码要点分析
 


1. 在 TestSort 函数中, int arr[] = { 9,5,1,3,7,8,4,2,6,0 };  创建一个包含10个整数的测试数组。 int n = sizeof(arr) / sizeof(arr[0]);  计算数组的元素个数。
 
2. 调用 PrintSort 函数打印数组初始状态,然后调用 Insertsort 函数进行排序,注释掉的 ShellSort(arr, n);  表示如果需要测试希尔排序,可取消注释。最后再次调用 PrintSort 函数打印排序后的数组。
 
3.  main 函数中仅调用 TestSort 函数,程序从这里开始执行。
 


八、总结


通过对上述代码的详细分析,我们深入了解了插入排序和希尔排序的实现过程。插入排序简单直观,适用于小规模数据的排序;希尔排序作为插入排序的改进算法,通过分组和逐渐缩小间隔的方式,提高了排序效率,尤其在处理大规模数据时表现更为出色。在实际应用中,我们可以根据数据的特点和规模,选择合适的排序算法来满足需求。

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

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

相关文章

2025-03-20 学习记录--C/C++-C 库函数 - toupper()、tolower()、 isspace()

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、C 库函数 - toupper() ⭐️ C 标准库 - <ctype.h> C 标准库的 ctype.h 头文件提供了一些函数&#xff0c;可用于测试和…

易语言模拟真人鼠标轨迹算法

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

sparksql的Transformation与 Action操作

Transformation操作 与RDD类似的操作 map、filter、flatMap、mapPartitions、sample、 randomSplit、 limit、 distinct、dropDuplicates、describe&#xff0c;而以上这些都是企业中比较常用的&#xff0c;这里在一个文件中统一论述 val df1 spark.read.json("src/m…

微软Data Formulator:用AI重塑数据可视化的未来

在数据驱动的时代,如何快速将复杂数据转化为直观的图表是每个分析师面临的挑战。微软研究院推出的开源工具 Data Formulator,通过结合AI与交互式界面,重新定义了数据可视化的工作流。本文将深入解析这一工具的核心功能、安装方法及使用技巧,助你轻松驾驭数据之美。 一、Dat…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

String、StringBuffer、StringBuiler的区别

可变性 String是不可变的&#xff0c;这是因为String内部用于存储数据的char[]数组用了final关键字修饰&#xff0c;而且是private的&#xff0c;并且没有对外提供修改数组的方法。 StringBuffer和StringBuilder是可变的&#xff0c;它们内部的char数组没有用final关键字修饰。…

Certd自动化申请和部署SSL证书并配置https

服务器使用的华为云&#xff0c;之前SSL证书通过配置Cloudflare的DNS实现的&#xff0c;最近华为云备案提示需修改解析至境内华为云IP&#xff0c;若解析境外IP&#xff0c;域名无需备案&#xff0c;需注销或取消接入备案信息&#xff0c;改为使用Certd自搭建证书管理工具&…

git tag以及git

git tag 以及git 一、先说收获吧 1. git bash 在windows上 类似于linux的bash提供的shell命令行窗口&#xff0c;可以执行很多linux命令&#xff0c;cd pwd ls vim cat touch mkdir&#xff0c;还可以用正则匹配查看标签。相当于在windows上装了一个小的linux。git init myproj…

ESP8266通过AT指令配置双向透传

一、固件烧录 IO0接地后上电&#xff0c;进入烧录模式&#xff0c;烧录完成后去掉即可 二、参数配置 1、服务器端 ATCWMODE_DEF2 ATCWSAP_DEF"ESP8266","12345678",5,3 ATSAVETRANSLINK1,"192.168.4.2",9090,"UDP",8080 2、客户端…

【3D模型】【游戏开发】【Blender】Blender模型分享-狮头木雕附导入方法

导入方法&#xff1a; [Blender] 如何导入包含纹理的 .blend 模型文件 在 3D 建模和渲染工作中&#xff0c;Blender 是一款功能强大的免费开源软件。很多时候&#xff0c;我们需要导入 .blend 后缀的模型文件&#xff0c;同时确保纹理&#xff08;textures&#xff09;文件夹…

C# | 超简单CSV表格读写操作(轻松将数据保存到CSV,并支持读取还原)

C# | 超简单CSV表格读写操作&#xff08;轻松将数据保存到CSV&#xff0c;并支持读取还原&#xff09; 文章目录 C# | 超简单CSV表格读写操作&#xff08;轻松将数据保存到CSV&#xff0c;并支持读取还原&#xff09;一、上位机开发中的CSV应用背景二、CSV读写实战教学1. 基本对…

Unity导出WebGL,无法显示中文

问题&#xff1a;中文无法显示 默认字体无法显示中文 在编辑器中设置了中文和英文的按钮&#xff0c;中文按钮无法显示 导出后无法显示中文 解决办法&#xff1a; 自己添加字体&#xff0c;导入项目&#xff0c;并引用 示例 下载一个字体文件&#xff0c;这里使用的阿里…

阅读《Vue.js设计与实现》 -- 02

接上一篇文章&#xff1a;阅读《Vue.js设计与实现》 – 01 文章目录 第二章提升用户的开发体验tips 控制框架代码的体积Tree-Shaking副作用 框架应该输出怎样的构建产物&#xff1f;注意这两个文件有什么区别&#xff1f; 特性开关如何实现&#xff1f; 处理错误TS支持 第二章 …

Mac:Ant 下载+安装+环境配置(详细讲解)

&#x1f4cc; 下载 Ant 下载地址&#xff1a;https://ant.apache.org/bindownload.cgi &#x1f4cc; 无需安装 Apache官网下载 Ant 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目录下新建了个…

蓝桥杯国赛子串2023动态规划,暴力

#include <bits/stdc.h> using namespace std; // string ss; #define int long long string s; //该方法通过动态规划&#xff0c;找到2023字串&#xff0c;而2023等于202加3&#xff0c;202等于202&#xff0c;20等于20&#xff1b; int f2() {int dp[4]{0};//dp[0]代表…

Vue3项目开发:状态管理实践指南

# Vue3项目开发&#xff1a;状态管理实践指南 一、引言 背景介绍 在Vue项目中&#xff0c;状态管理是一个非常重要的话题。合理的状态管理能够帮助我们更好地组织和管理数据&#xff0c;提升项目的可维护性和可扩展性。本文将深入探讨Vue3项目中状态管理的最佳实践&#xff0c;…

网络安全漏洞与修复 网络安全软件漏洞

文章目录 一、软件漏洞的概念 1、信息安全漏洞简述2、软件漏洞3、软件漏洞概念4、软件漏洞的成因分析 二、软件漏洞标准化管理 1、软件漏洞分类2、软件漏洞分级3、安全漏洞管理规范 一、软件漏洞的概念 1、信息安全漏洞简述 信息安全漏洞是信息安风险的主要根源之一&…

SpringBoot项目controller层接收对应格式请求的相关RequestMapping配置

目录 &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; 注&#xff1a;此情况注意和&#xff08;4&#xff09;中情况进行区分 &#xff08;4&#xff09; 在几个springboot项目开发后&#xff0c;我总结了以下的一些常见的接收对应请求的…

2025年图生视频模型技术全景解析

一、开源图生视频模型 阿里通义万象Wan2.1系列 I2V-14B-480P&#xff1a; 14B参数基础模型支持480P分辨率图生视频显存需求16GB以上 I2V-14B-720P&#xff1a; 高清增强版模型采用分帧渲染技术&#xff0c;输出分辨率达1280720 技术特性&#xff1a; 支持中文提示词自动解析内置…

一场由 ES 分片 routing 引发的问题

一场由 ES 分片 routing 引发的问题 ES 结构 {"poroperties": {"joinType": {"type": "join","eager_global_ordinals": true,"relations": {"spu": "sku"}},"id":{"type&q…