【C语言】两种方式实现冒泡排序算法
题目要求
编写一个C语言程序,实现基本的冒泡排序算法.
算法
冒泡排序,用一句话来总结:
一组数中,相邻的两个数进行比较、交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序
要想对N个数字进行排序,循环N次即可.
如果真的不理解冒泡排序算法,请点击:冒泡排序_360百科
核心代码
//方式一:从头向尾遍历,将最大数(相对)沉入尾部(相对) void BubbleSort1(int *arr,int sz){int i = 0;int j = 0;assert(arr);for(i=0;i<sz-1;i++){for(j=0;j<sz-i-1;j++){if(arr[j]>arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}} } //方式二:从尾向头遍历,将最大数(相对)冒泡到头部(相对) void BubbleSort2(int *arr,int sz){int i = 0;int j = 0;assert(arr);for(i=0;i<sz-1;i++){for(j=sz;j>i;j--){if(arr[j]>arr[j-1]){int tmp = arr[j];arr[j] = arr[j-1];arr[j-1] = tmp;}}} }
完整代码
/* *本代码版权归高小调博客所有 *作者:高小调 *日期:2016-9-9 *代码功能:通过C语言实现冒泡排序算法 *集成开发环境:Microsoft Visual Studio 2010 */ #include<stdio.h> #include<assert.h> #include<stdlib.h.h> //从头向尾遍历 //相邻两数进行比较 //将最大数(相对)沉入尾部(相对) void BubbleSort1(int *arr,int sz){int i = 0;int j = 0;assert(arr);for(i=0;i<sz-1;i++){for(j=0;j<sz-i-1;j++){if(arr[j]>arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}} } //从尾向头遍历 //相邻两数进行比较 //将最小数(相对)冒泡到头部(相对) void BubbleSort2(int *arr,int sz){int i = 0;int j = 0;assert(arr);for(i=0;i<sz-1;i++){for(j=sz;j>i;j--){if(arr[j]>arr[j-1]){int tmp = arr[j];arr[j] = arr[j-1];arr[j-1] = tmp;}}} } //测试函数 //为了方便起见,将参数设定为一个函数指针 void TestBubbleSort(void (*BubbleSort)(int *arr,int sz)){int arr[]={1,3,5,7,9,2,4,6,8,0};int i = 0;int sz = sizeof(arr)/sizeof(arr[0]);BubbleSort(arr,sz);for(i=0; i<sz; i++){printf("%d ",arr[i]);}printf("\n"); } int main(){TestBubbleSort(BubbleSort1);TestBubbleSort(BubbleSort2);system("pause");return 0; }
输出结果
以上只是冒泡排序算法的基本实现,还有很大的优化空间.至于优化的具体细节,详见下文.
(本文来源于互联网,若有侵权,请联系博主)
转载于:https://www.cnblogs.com/qq329914874/p/6002297.html
【C语言】两种方式实现冒泡排序算法相关推荐
- c语言冒泡排序法程序填空_【C语言】两种方式实现冒泡排序算法
题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...
- 冒泡排序的两种方式c语言代码,【C语言】两种方式实现冒泡排序算法
题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...
- 使用Navicat和Transact-SQL语言两种方法创建、修改和删除表
修改基本表 数据库db100里 向employee中添加地址列 Mysql>alter table employee add address char(50); 增加课程名称必须取唯一值的约束条 ...
- 两种方式(goto语句以及while循环)实现C语言关机小程序
用C语言写的关机小程序简单易懂,可以拿去整蛊室友同学(每天一个挨打小技巧),下面我就给出两种方式实现这个代码,欢迎大家讨论补充. 1.用goto语句实现: #include <stdio.h&g ...
- 算法导论Java实现-随机化数组的两种方式(5.3章节)
package lhz.algorithm.chapter.five; /** * 随机数组两种实现,<算法导论>第五章第三节 * 本文地址:http://mushiqianmeng.bl ...
- ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)
ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式) 目录 基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两 ...
- c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式
C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth( ...
- 指针数组下标JAVA_Java语言中可用下标和指针两种方式表示数组元素。
[判断题]一行可以写多条预处理命令 [判断题]如果一个java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名一致. [判断题]Protected类型的实例变量只能在本类中使用,其他类中不可 ...
- 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】
引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...
最新文章
- 内存问题分析的利器——valgrind的memcheck
- Linux常用压缩解压命令
- fetchtype 动态控制_RouterOS利用aliyun的API接口实现DDNS动态解析
- WorldWind源码剖析系列:外包围盒类BoundingBox和外包围球类BoundingSphere
- Java 图形用户界面(GUI)java.awt包概述
- 钉钉扫码登录的实现 与OAUTH2.0
- 手机游戏量产引擎研发手记-导读
- Shell-cat url-list.txt | xargs wget -c
- 基于matlab的电力系统输电仿真,基于MATLAB电力系统线路运行的仿真与分析
- 《人月神话》阅读心得
- 漂亮的字体 手写_20种漂亮的草书和手写字体可供下载
- mysql leader/followers_Leader/Followers 模式
- 珠海网站建设需要多少钱?
- 1000人 规模园区网设计
- 从员工到总经理的成长笔记:自慢(6)
- 安装phpnow服务[Apache_pn]提示失败的解决方法
- Godaddy域名申请及设置
- mysql 索引底层数据结构与算法
- python语言画图代码_零: python matplotlib 画图进阶(含完整代码)
- java debug非同期ski,简记kafka group id相同导致的不同consumers启动后不消费和延时消费问题...
热门文章
- 菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty
- 创建模块化程序(二)
- 将集合中的内容按时间排序
- Uncaught ReferenceError: angular is not defined
- 理解JavaScript中的事件
- Android开发之通过接口回调机制加载数据(源代码分享)
- 自定义最大高度的ViewGroup
- Please ensure JDK installation is valid and compatible with the current OS
- 算法-----数组------ 数组中的第K个最大元素
- Android 自定义debug.keystore