当前位置: 首页 > article >正文

【C语言入门级教学】冒泡排序和指针数组

文章目录

  • 1.冒泡排序
  • 2.⼆级指针
  • 3.指针数组
  • 4.指针数组模拟⼆维数组

1.冒泡排序

冒泡排序的核⼼思想:两两相邻的元素进⾏⽐较。

 //⽅法1  
void bubble_sort(int arr[], int sz)//参数接收数组元素个数  
{ int i = 0;for(i=0; i-1; i++) { int j = 0; for(j=0; j-1; j++) { if(arr[j] > arr[j+1]) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } 
} 
int main() 
{ int arr[] = {3,1,7,5,8,9,0,2,4,6};int sz = sizeof(arr)/sizeof(arr[0]); bubble_sort(arr, sz); int i = 0; for(i=0; i<sz;i++)printf("%d ", arr[i]); 
}return 0; 
} 
//⽅法2 - 优化  
void bubble_sort(int arr[], int sz)//参数接收数组元素个数  
{ int i = 0; for(i=0; i-1; i++) { int flag = 1;//假设这⼀趟已经有序了  int j = 0; for(j=0; j-1; j++) { if(arr[j] > arr[j+1]) { flag = 0;//发⽣交换就说明,⽆序  int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } if(flag == 1)//这⼀趟没交换就说明已经有序,后续⽆序排序了  break; } 
} 
int main() 
{ int arr[] = {3,1,7,5,8,9,0,2,4,6}; int sz = sizeof(arr)/sizeof(arr[0]); bubble_sort(arr, sz); int i = 0; for(i=0; i<sz;i++)printf("%d ", arr[i]); 
} return 0; 
}

2.⼆级指针

指针变量也是变量,是变量就有地址,而指针变量的地址存放在⼆级指针中。

⼆级指针画图

对于⼆级指针的运算有:

• *ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa .

 int b = 20 
*ppa = &b;//等价于 pa = &b; 

• * *ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: * pa ,那找到的是 a .

**ppa = 30; 
//等价于*pa = 30;  
//等价于a = 30;  

3.指针数组

指针数组是指针还是数组? 我们类⽐⼀下,整型数组是存放整型的数组,字符数组是存放字符的数组。 那指针数组就是存放指针的数组。

整型数组和字符数组

指针数组的每个元素都是⽤来存放地址(指针)的。
如下图:

指针数组的每个元素是地址,⼜可以指向⼀块区域。

4.指针数组模拟⼆维数组

#include<stdio.h>  
int main() 
{ int arr1[] = {1,2,3,4,5}; int arr2[] = {2,3,4,5,6}; int arr3[] = {3,4,5,6,7}; //数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中  int* parr[3] = {arr1, arr2, arr3}; int i = 0; int j = 0; for(i=0; i<3; i++) { for(j=0; j<5; j++) { printf("%d ", parr[i][j]); } printf("\n"); }return 0; 
} 

parr数组的画图演⽰

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的

http://www.lryc.cn/news/2396980.html

相关文章:

  • shell脚本中常用的命令
  • Nuxt3部署
  • 网络攻防技术一:绪论
  • 【人工智能】deepseek七篇论文阅读笔记大纲
  • unix/linux source 命令,在当前的 Shell 会话中读取并执行指定文件中的命令
  • [leetcode] 二分算法
  • imgsz参数设置
  • 【算法】分支限界
  • 使用 C/C++ 和 OpenCV 调用摄像头
  • 历史数据分析——广州港
  • 数据库管理与高可用-MySQL全量,增量备份与恢复
  • 从gitee仓库中恢复IDEA项目某一版本
  • 用dayjs解析时间戳,我被提了bug
  • [git每日一句]Changes not staged for commit
  • 架构师面试题整理
  • 类和对象:实现日期类
  • 基于springboot的运动员健康管理系统
  • 华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤
  • 下载即转化的商业密码:解析华为应用商店CPD广告的智能投放逻辑
  • 分布式锁和数据库锁完成接口幂等性
  • 浅谈JMeter之常见问题Address already in use: connect
  • 【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
  • 【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
  • 常规算法学习
  • Google 发布的全新导航库:Jetpack Navigation 3
  • Arbitrum Stylus 合约实战 :Rust 实现 ERC20
  • 电脑故障基础知识
  • 12.2Swing中JButton简单分析
  • 内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
  • JavaScript性能优化实战指南(详尽分解版)