(c语言)通俗易懂的冒泡代码思路
冒泡排序
具体如何来移动呢?让我们来看一个例子
看这些柱子用冒泡排序按顺序排好,可以从小到大,也可以从大到小。
冒泡排序原理:
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语言)通俗易懂的冒泡代码思路相关推荐
- C语言实现三子棋游戏 代码+思路+电脑下棋算法
C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...
- c语言数组冒泡排序程序的解释,c语言指针数组冒泡排序代码
在学习计算机编程的时候,最重要的就是多思考多练习,才能理解其中的原理.算法,下面ITmemo分享一段我学习c语言基础之后写的一段c语言指针数组冒泡排序代码,其实就是从常规代码改为指针方式进行数组排序而 ...
- java兔子问题编程思路详解_java语言求解兔子问题代码分析
1.思考 兔子问题,是费氏数列的形象化说法,它是由一位名为Fibonacci的数学家在它的著作中提出的一个问题. 2.描述 它体术的问题是:若有一只免子每个月生一只小免子,一个月后小免子也开始生产.起 ...
- C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全
一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...
- 【C语言】编写C代码求100的阶乘进行高精度计算
[C语言]编写C代码求100的阶乘进行高精度计算 要编写C语言代码求100的阶乘进行高精度计算,需要使用数组来存储每一位数字,并进行进位处理.因为100的阶乘有158位,超过了long long类型的 ...
- 易语言高级表格写入MYSQL_易语言数据库与高级表格思路分析.doc
易语言数据库与高级表格思路分析 篇一:易语言数据库操作指南 易语言数据库操作指南 一.易语言操作Access数据库 前面我们已经对比分析过易语言所支持的几种常见数据库,在这几种数据库中,我们先来学习一 ...
- 关于入门C语言编写简易程序的一些思路
关于入门C语言编写简易程序的一些思路 你好,点开这篇文章的朋友.不管你是抱着怎样的目的来学习C语言,我们首先都要明白一件事:你是一个以键盘作为施工工具的程序工地工人,千万不要在施工过程中忘记带上& ...
- 华为js面试题_华为C语言面试题最优思路及答案分享
原标题:华为C语言面试题最优思路及答案分享 华为校招15道C语言面试题分享 用预处理指令#define 声明一个常数, 用以表明1年中有多少秒 (忽略闰年问题) 一 题 #defineSECONDS_ ...
- html页面数字滚动,Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码)...
原文:Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码) 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果 ...
最新文章
- ISLR_Propotion
- SAP HUM 如何将2个HU合并并成一个?
- (转)Java并发编程:线程池的使用
- ACCESS表达式不匹配:Data type mismatch in criteria expression.
- 2020年Mybatis源码解读
- 变量的命名规则与惯例
- 用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk
- Dojo Shifter 2 for Mac(ae效果图层处理插件)
- 联合证券|内外利好共振 今年A股可更乐观一点
- 蓝桥杯—切面条/大衍数列
- 电脑蓝屏---错误代码:0xc0000185,修复过程转0xc0000001,最后成功修复
- apk签名打包报错,一堆警告
- 图像细节增强(直方图均衡化,对数变换,Gamma变换(校正))
- YoLov3训练自己的数据集(小白手册)
- 北邮网络安全-防火墙
- 华宇法律人工智能平台:用新一代的科技推动新时代的法律服务达到完全互联、无所不在 |百万人学AI评选
- 大盘趋势图强弱分析 通达信大盘多空指标公式 副图不加密
- QIIME2-单端数据Deblur
- ZentermLite上传文件
- 安装CA证书服务的一系列过程