首页/新闻资讯/正文详情

C 语言基础:冒泡排序与二级指针详解

发布时间:2026/11/5 6:40:29 来源:云帆数科 栏目:资讯中心
C 语言基础:冒泡排序与二级指针详解
博客的开篇我们来介绍一个基础算法——冒泡排序它的作用是将未升序数组排成升序。一、冒泡排序让数组有序的基本算法冒泡排序的核心思路是两两相邻比较较大的元素向后移动。每一轮都能排好至少一个数第一轮会把最大的元素放到数组最后面因此最多需要sz - 1轮就能完成排序。void bubble_sort(int* arr, int sz) { //思路两两相邻比较较大的后移每一轮都能排好至少一个数首轮让最大的元素到最后面 //因此最多 sz - 1 轮就能排好 for (int i 0; i sz - 1; i) { for (int j 0; j sz - 1 - i; j)//在最大轮数的基础上减去 i因为轮了 i 轮会排好至少 i 个 { //逻辑如果左边比右边大就交换 //传了地址过来解引用指针就得到相应元素了 if (*(arr j) *(arr j 1)) { int temp *(arr j);//保存左边的大值 *(arr j) *(arr j 1);//把右边小值赋给左边 *(arr j 1) temp;//再把原大值赋给右边完成升序 } } } }运行结果如下图所示二、冒泡排序的优化用 flag 提前结束循环上面的程序可以顺利完成排序但我们能否进一步优化程序、节省运行时间呢例如数组可能已经排好了程序却仍然继续循环造成资源浪费。答案是肯定的我们可以借助一个flag 标记。借助flag 值的变化可以判断数组是否已经完成排序如果某一轮没有发生任何交换说明数组已经有序可直接return结束排序函数。bool flag 1;//假设数组已经有序 for (int i 0; i sz - 1 flag; i) { flag 0;//每轮开始时假设已有序 for (int j 0; j sz - 1 - i; j) { if (*(arr j) *(arr j 1)) { int temp *(arr j); *(arr j) *(arr j 1); *(arr j 1) temp; flag 1;//发生交换说明尚未完全有序 } } }优化效果示意图如下三、认识二级指针先来回顾一级指针例如int a 10; int* pa a;pa左侧的*表示pa是一个指针变量*左边的int表示指针指向的内容是int类型此时pa中存放的是整型变量a的地址。而二级指针存放的是一级指针变量的地址例如int** ppa pa;ppa左边的第一个*表示ppa是一个指针变量而*左边的int*则表示ppa指向的内容是int*类型。对于解引用**ppa等价于*pa也等价于a。也就是说对**ppa或*pa操作相当于对a本身操作。四、二级指针的用途用指针数组模拟二维数组二级指针有一个重要用途——通过指针数组模拟二维数组。所谓指针数组顾名思义就是存放指针的数组即数组元素类型为指针类型。具体逻辑是二维数组的每一行都是一维数组而指针可以通过数组名即首元素地址访问该数组。int* arr[3] { arr1, arr2, arr3 };此时arr[0]就相当于得到了arr1首元素的地址。五、总结本文从冒泡排序的相邻比较思想出发介绍了它的完整实现以及flag 提前退出优化随后由一级指针过渡到二级指针说明了二级指针的含义、解引用规则以及它借助指针数组模拟二维数组的典型用途。掌握这两块内容有助于进一步理解 C 语言中的排序算法与多级指针机制。

相关推荐

REA 安装教程:终端拿到 rea 命令,四步打通逆向分析与 MCP
REA 安装教程:终端拿到 rea 命令,四步打通逆向分析与 MCP

REA 安装教程:终端拿到 rea 命令,四步打通逆向分析与 MCP 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea REA(R… · 2026/11/5 6:38:28

私有部署 Geo 优化源码:从编译到上线完整技术流程分享
私有部署 Geo 优化源码:从编译到上线完整技术流程分享

1. 引言在私有化部署场景中,Geo 服务的性能与稳定性往往直接决定业务可用性。很多团队拿到源码后,习惯直接使用官方预编译包,但遇到定制需求、安全加固或性能调优时,就必须走「源码编译 → 优化 → 上线」这条完整链路。本文基于实… · 2026/11/5 6:38:28

C++的设计与演进大纲(如何从C语言一步步成长为C++)
C++的设计与演进大纲(如何从C语言一步步成长为C++)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 6:38:28

OpenMV与STM32F103C8T6串口通信实现物料搬运机器人视觉控制
OpenMV与STM32F103C8T6串口通信实现物料搬运机器人视觉控制

简介:这份资源面向参加工程训练类比赛的学生与嵌入式初学者,提供一套基于OpenMV视觉模块与STM32F103C8T6微控制器的物料搬运机器人完整代码方案,用C语言实现图像识别、目标定位与运动控制的协同,解决机器人自主识别物料并完成抓取… · 2026/11/5 8:28:09

GEE Assets 批量删除与复制实战指南
GEE Assets 批量删除与复制实战指南

资产目录越堆越乱这件事,几乎每个用 Google Earth Engine 做过几个项目的人都躲不过。最初的几个月图省事,导入的影像随手丢在根目录,命名全靠手打,Collection 和 Image 混在一起,等到项目交接或者要清理额度的时候&am… · 2026/11/5 8:28:09

BI工具冗余如何拖慢企业决策?破解数据孤岛难题
BI工具冗余如何拖慢企业决策?破解数据孤岛难题

1. 问题现象:BI工具越多,决策反而越慢的怪圈最近三年接触了47家企业的数据分析团队,发现一个有趣的反常现象:约68%的企业在引入第二个BI工具后,季度经营分析会的决策周期平均延长了2.3个工作日。某零售企业甚至出现了&… · 2026/11/5 8:28:09

数字孪生技术架构与实施全解析
数字孪生技术架构与实施全解析

1. 数字孪生技术全景解析:从概念到落地实践作为一名长期从事三维可视化与工业数字化的技术从业者,我见证了数字孪生技术从实验室概念到产业落地的完整发展历程。今天,我将系统性地梳理数字孪生领域300个核心术语与技术要点,这些知… · 2026/11/5 8:28:09

GIS可视化中色彩科学与ArcGIS色带应用
GIS可视化中色彩科学与ArcGIS色带应用

1. 色彩科学在GIS可视化中的核心价值地理信息系统(GIS)的可视化效果直接影响数据解读效率,而色彩作为最直观的视觉变量,其科学运用尤为关键。在ArcGIS平台中,色带(Color Ramp)不仅是简单的颜色过… · 2026/11/5 8:28:09

VDSR超分辨率实战:残差学习与20层卷积设计解析
VDSR超分辨率实战:残差学习与20层卷积设计解析

简介:这份资源围绕CVPR2016论文《Accurate Image Super-Resolution Using Very Deep Convolutional Networks》展开,提供VDSR超分辨率模型的Caffe实现,并附带MatConvNet测试代码,面向已具备深度学习基础、希望复现或改进单图像超分… · 2026/11/5 8:27:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码