冒泡排序

具体如何来移动呢?让我们来看一个例子

看这些柱子用冒泡排序按顺序排好,可以从小到大,也可以从大到小。

冒泡排序原理:

1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2:对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
3: 针对所有的元素重复以上的步骤,除了最后一个。

4:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较**

假设有一个数组arr[] ,里面放的元素是{10,9,8,7,6,5,4,3,2,1}; 现在想用冒泡排序将它变为升序排列。
那么每个元素到了正确的位置上就算一趟,像下图左边的情况一样,通过不断比较两个相邻的数,最后面10是最大的数,使用10就在最后面,这就叫一趟,一趟就是完成了一个数字归位,所以10个元素只需要走9趟就可以了。然后持续重复的不足归位一个待归位的元素就-1.

代码思路

首先要创建一个数组并且确定的的数组个数

//创建要排序的数组int arr[] = { 10,9,8,7,6,5,4,3,2,1 };//确定趟数 //10个int sz = sizeof(arr) / sizeof(arr[0]);

第二:冒泡排序 函数 ,并且把数组传过去

//冒泡排序 bubble_sort(arr , sz);

第三: 创建函数,不需要返回,排序就可以,所以void

void bubble_sort(int arr[], int sz)
{}

第四:确定要跑的趟数 ,和每次走完一趟减掉一个元素

int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - 1 - i; j++){}}

第五:满足条件就排序交换位置

         //满足条件的交换if (arr[j] > arr[j + 1] ){int tmp = arr[j];arr[j ] = arr[j + 1];arr[j + 1] = tmp;}

第六:打印出来 结果是 //1,2,3,4,5,6,7,8,9,10

int main()
{int i = 0;//打印出来for (i = 0; i < sz; i++){printf("%d ", arr[i]);}
}

这就是冒泡排序的代码思路,最后再来看看完整的代码吧

void bubble_sort(int arr[], int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){int j = 0;for (j = 0; j < sz - 1 - i; j++){//满足条件的交换if (arr[j] > arr[j + 1] ){int tmp = arr[j];arr[j ] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{//创建要排序的数组int arr[] = { 10,9,8,7,6,5,4,3,2,1 };//确定趟数 //10个int sz = sizeof(arr) / sizeof(arr[0]);//冒泡排序bubble_sort(arr , sz);   int i = 0;//打印出来for (i = 0; i < sz; i++){printf("%d ", arr[i]);}
}

不过有一个地方要注意的是,在不知道数组长度的是,不能直接在bubble_sor函数里面求数组个数

第一:要注意的是这里传数组过去其实传的是arr[]首个元素地址,

//冒泡排序
//  bubble_sort(arr);

第二:这里就是的int arr[] 依然表示是指针int * arr[]

void bubble_sort(int arr[])   //arr[]实则是指针 int *arr
{}

所以最后在里面求得其实是指针的大小

void bubble_sort(int arr[])          //arr[]实则是指针 int *arr
{//那求得不在是元素个数是指针的大小int sz = sizeof(arr) / sizeof(arr[0]);  //err

所以不能直接在bubble_sor函数里面求数组个数,要在外面求好了再传进来,思路就是上面的了

(c语言)通俗易懂的冒泡代码思路相关推荐

  1. C语言实现三子棋游戏 代码+思路+电脑下棋算法

    C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...

  2. c语言数组冒泡排序程序的解释,c语言指针数组冒泡排序代码

    在学习计算机编程的时候,最重要的就是多思考多练习,才能理解其中的原理.算法,下面ITmemo分享一段我学习c语言基础之后写的一段c语言指针数组冒泡排序代码,其实就是从常规代码改为指针方式进行数组排序而 ...

  3. java兔子问题编程思路详解_java语言求解兔子问题代码分析

    1.思考 兔子问题,是费氏数列的形象化说法,它是由一位名为Fibonacci的数学家在它的著作中提出的一个问题. 2.描述 它体术的问题是:若有一只免子每个月生一只小免子,一个月后小免子也开始生产.起 ...

  4. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  5. 【C语言】编写C代码求100的阶乘进行高精度计算

    [C语言]编写C代码求100的阶乘进行高精度计算 要编写C语言代码求100的阶乘进行高精度计算,需要使用数组来存储每一位数字,并进行进位处理.因为100的阶乘有158位,超过了long long类型的 ...

  6. 易语言高级表格写入MYSQL_易语言数据库与高级表格思路分析.doc

    易语言数据库与高级表格思路分析 篇一:易语言数据库操作指南 易语言数据库操作指南 一.易语言操作Access数据库 前面我们已经对比分析过易语言所支持的几种常见数据库,在这几种数据库中,我们先来学习一 ...

  7. 关于入门C语言编写简易程序的一些思路

    关于入门C语言编写简易程序的一些思路 ​ 你好,点开这篇文章的朋友.不管你是抱着怎样的目的来学习C语言,我们首先都要明白一件事:你是一个以键盘作为施工工具的程序工地工人,千万不要在施工过程中忘记带上& ...

  8. 华为js面试题_华为C语言面试题最优思路及答案分享

    原标题:华为C语言面试题最优思路及答案分享 华为校招15道C语言面试题分享 用预处理指令#define 声明一个常数, 用以表明1年中有多少秒 (忽略闰年问题) 一 题 #defineSECONDS_ ...

  9. html页面数字滚动,Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码)...

    原文:Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码) 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果 ...

最新文章

  1. ISLR_Propotion
  2. SAP HUM 如何将2个HU合并并成一个?
  3. (转)Java并发编程:线程池的使用
  4. ACCESS表达式不匹配:Data type mismatch in criteria expression.
  5. 2020年Mybatis源码解读
  6. 变量的命名规则与惯例
  7. 用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk
  8. Dojo Shifter 2 for Mac(ae效果图层处理插件)
  9. 联合证券|内外利好共振 今年A股可更乐观一点
  10. 蓝桥杯—切面条/大衍数列
  11. 电脑蓝屏---错误代码:0xc0000185,修复过程转0xc0000001,最后成功修复
  12. apk签名打包报错,一堆警告
  13. 图像细节增强(直方图均衡化,对数变换,Gamma变换(校正))
  14. YoLov3训练自己的数据集(小白手册)
  15. 北邮网络安全-防火墙
  16. 华宇法律人工智能平台:用新一代的科技推动新时代的法律服务达到完全互联、无所不在 |百万人学AI评选
  17. 大盘趋势图强弱分析 通达信大盘多空指标公式 副图不加密
  18. QIIME2-单端数据Deblur
  19. ZentermLite上传文件
  20. 安装CA证书服务的一系列过程

热门文章

  1. win10用户注销后该怎么办?如何彻底删除原有的用户名
  2. M - Bombs CodeForces - 350C(方格,模拟)
  3. 微服务和分布式的区别什么?有什么特点?
  4. 对LBP与HOG的理解
  5. Windows下swig安装与配置
  6. 2020长三角区块链应用创新大赛复赛第三场于能链科技成功举办!
  7. 浪潮之颠二_读书笔记
  8. python中占位符解释
  9. 再生龙盘对盘拷贝Linux
  10. JavaScript系列文章:变量提升和函数提升