上一篇写到一维数组今天接着展开。一、冒泡排序算法相邻两个元素比较小的放在前大的放在后最终实现升序排序。#include stdio.h int main(void) { int a[10] {}; int len sizeof(a)/sizeof(a[0]); int i 0; printf(input 10 numbers:); for(i 0; i len; i) { scanf(%d, a[i]); } i 0; int j 0; //确定需要比较几位 for(i 1; i len; i) { //从第一位开始逐位与相邻元素进行比较 for(j 0; j len-i; j) { //a[j]比a[j1]大则交换 int t 0; if (a[j] a[j1]) { t a[j]; a[j] a[j1]; a[j1] t; } } } for(i 0; i len; i) { printf(a[%d] %d\n,i, a[i]); } return 0; }二、插入排序在一个有序的数列中找到合适位置插入排序的数。非原地插入排序#include stdio.h int main(void) { int a[10] {}; int b[10] {}; int len sizeof(a)/sizeof(a[0]); int i 0; printf(input 10 numbers:); for(i 0; i len; i) { scanf(%d, a[i]); } int t 0; int j 0; //确定插入的数 for (i 0; i len; i) { t a[i];//取数 j i;//准备放的位置 //依次与已经排列好的有序数列的数比较 while (j 0 b[j-1] t) { //如果比前一位数小则交换 b[j] b[j-1]; --j; } //找到合适的位置插入 b[j] t; } for(i 0; i 10; i) { printf(a[%d] %d\n, i, b[i]); } return 0; }这种插入排序占用的内存多空间复杂度较高。可以有优化成下面的这种排序原地插入排序只展示关键算法int t 0; int j 0; for (i 0; i len; i) { t a[i];//取数 j i;//准备放的位置 //依次与已经排列好的有序数列的数比较 while (j 0 a[j-1] t) { //如果比前一位数小则交换 a[j] a[j-1]; --j; } //找到合适的位置插入 a[j] t; }三、算法比较如何判断算法好坏时间复杂度衡量算法随着问题规模变化所需时间的趋势。分为最好、最坏和平均一般看最坏的时间复杂度。大O计算法//冒泡排序 for(i 1; i len; i) { for(j 0; j len-i; j) { int t 0; if (a[j] a[j1]) { t a[j]; a[j] a[j1]; a[j1] t; } } } //选择排序 for (i 0; i len-1 ; i) { for (j i1; j len; j) { if (a[j] a[i]) { int t a[j]; a[j] a[i]; a[i] t; } } } //插入排序 for (i 0; i len; i) { t a[i]; j i; while (j 0 b[j-1] t) { b[j] b[j-1]; --j; } b[j] t; }选择排序、冒泡排序和插入排序的算法复杂度都是O(n^2)。四、二分查找排序的目的就是方便查找。二分查找的前提数据本身是有序的。思路首先确认中间位置将中间位置上的值与要查找的值比较若要查找的值更大则在后面的位置继续二分查找若要查找的值较小则在前面的位置继续二分查找若相等则直接输出。#include stdio.h int main(void) { int a[10] {}; int n; int len sizeof(a)/sizeof(a[0]); int i 0; printf(input 10 numbers:); for(i 0; i len; i) { scanf(%d, a[i]); } int t 0; int j 0; //确定插入的数 for (i 0; i len; i) { t a[i];//取数 j i;//准备放的位置 //依次与已经排列好的有序数列的数比较 while (j 0 a[j-1] t) { //如果比前一位数小则交换 a[j] a[j-1]; --j; } //找到合适的位置插入 a[j] t; } printf(input a number:); scanf(%d, n); int mid; int begin 0; int end len - 1; while(begin end) { //计算中间值 mid (begin end)/2; //要查找的值比中间值大 if (n a[mid]) { //到中间的后段继续查找 begin mid1; } //要查找的值比中间值小 else if (n a[mid]) { //到中间的前段继续查找 end mid-1; } //相等直接跳出循环 else { break; } } //如果begin大于end说明没有找到值输出not found if (begin end) { printf(HAS BEEN FOUND\n); }else { printf(NOT FOUND\n); } return 0; }五、字符型一维数组定义char str[];初始化char str[10] {h,e,l,l,o};hello 从字符数组的角度看字符串字符串是一种特殊的字符数组 (始终以\0作为结束标志)//数组 char str[10] {h,e,l,l,o,5,6,7,8,9}; //全部初始化 char str[10] {h,e,l,l,o}; //部分初始化因为后面有0所以可以当作字符串 char str[10] {0}; //初始化为 0 char str[10] {}; char str[10]; //不初始化 ---随机值 char str[] {h,e,l,l,o,5,6,7,8,9}; //字符串 char str[10] hello; //hello 字符串常量 char str[10] {hello}; char str[10] {h,e,l,l,o,\0}; //放了一个字符串 char str[] hello; //h,e,l,l,o,\0字符型数组可以用来存放字符串。C语言中将字符串当成字符型数组来处理。字符串是以\0结尾的操作字符串时更关注的是字符串本身什么时候结束而不是数组。代码中处理字符串是以\0作为结束判断的标志。puts/gets函数getschar *gets(char *s);功能:从标准输入获得字符串参数:s可以传一个 字符型一维数组的数组名。数组名从所代表的值角度代表的是数组首元素的地址也是数组的起始地址。返回值:成功 返回s失败 NULL注意:不推荐使用因为很容易导致数组越界。putsint puts(const char *s);功能:将s所在空间上的字符串输出参数:s表示存放字符串的一块空间的其实地址返回值:成功 返回非负数失败 -1六、总结今天学习了冒泡排序和插入排序算法加上昨天的选择排序算法一共三种排序算法。这三种算法是这两天的重点需要熟练掌握笔试面试要求能手写代码。冒泡相邻两两比较交换一趟把最大值 “浮” 到末尾选择每一轮选定位置在后面找到合适元素放到当前位置插入维护有序区把新元素插入有序区对应位置
企业数字化 ERP 产品动态
相关推荐
按键的弹跳与硬件消抖电路 1、按键的弹跳
▼当一个机械开关被按下或释放时,可能会产生短暂的多次状态变化,如下图1.1 所示的现象被称之为“抖动”。去抖或消抖(Debounce)可以有效的避免“抖动”造成的影响,它分为软件消抖与硬件消抖两种。 图1.… · 2026/9/24 17:37:23
`str.format()`支持对列表、元组和字典进行解包,使代码更加简洁 在Python编程中,字符串格式化是日常开发中最基础且高频的操作之一。无论是日志记录、数据展示还是用户交互,将变量动态嵌入到字符串中都是必不可少的技能。Python提供了多种字符串格式化的方式,其中str.format()方法以其强大的功能、灵活的语… · 2026/9/24 17:37:22
asd asd sad sad asd · 2026/9/24 18:12:16
Python本地人脸识别签到系统:可部署、可调试、可交付 简介:本资源是一个基于Python实现的轻量级GUI人脸识别签到系统,面向人工智能初学者、高校课程设计学生及中小型考勤场景开发者,解决传统签到效率低、易代签等问题。压缩包共20个文件(95KB),含6个核心Python… · 2026/9/24 18:12:10
Python NBA球员数据可视化实战:从抓取清洗到交互大屏 简介:基于Python的NBA球员数据可视化分析项目,是一份面向毕业设计、期末大作业的高分参考实现。项目由学长手写并获导师高度认可,代码附有详细注释,即使刚接触Python的新手也能快速理解逻辑并部署运行。资源共20个文件,… · 2026/9/24 18:12:10
基于Python与OpenCV的人脸识别门禁系统开发实战 简介:这是一套基于Python的人脸识别智能小区门禁管理系统源码,面向Python学习者、计算机专业学生及安防系统开发者,用于解决小区出入身份验证与门禁自动化管理问题。资源包共101个文件,大小约12.17MB,文件类型涵盖.py源… · 2026/9/24 18:12:03
随机森林在锂离子电池剩余寿命预测中的实用教程 简介:基于Python随机森林模型的锂离子电池剩余寿命预测项目资料,面向机器学习入门与进阶人群,适用于毕业设计、课程设计、大作业或工程实训。资源在调研阶段深入比较了锂离子电池剩余寿命预测的常用方法,对机器学习模型与传统物理… · 2026/9/24 18:12:03
用随机森林预测锂离子电池剩余寿命:从数据到部署的完整指南 简介:面向锂电池寿命预测研究的Python随机森林项目资料,涵盖从电池充放电数据整理到剩余寿命回归预测的完整流程,适合高校学生用于毕设、课程设计或初期工程实践,也适合希望了解随机森林在工业数据上应用的新手按需学习。压缩包共… · 2026/9/24 18:12:03
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44