题目要求

编写一个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语言】两种方式实现冒泡排序算法相关推荐

  1. c语言冒泡排序法程序填空_【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  2. 冒泡排序的两种方式c语言代码,【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  3. 使用Navicat和Transact-SQL语言两种方法创建、修改和删除表

    修改基本表 数据库db100里 向employee中添加地址列 Mysql>alter table employee add address char(50); 增加课程名称必须取唯一值的约束条 ...

  4. 两种方式(goto语句以及while循环)实现C语言关机小程序

    用C语言写的关机小程序简单易懂,可以拿去整蛊室友同学(每天一个挨打小技巧),下面我就给出两种方式实现这个代码,欢迎大家讨论补充. 1.用goto语句实现: #include <stdio.h&g ...

  5. 算法导论Java实现-随机化数组的两种方式(5.3章节)

    package lhz.algorithm.chapter.five; /** * 随机数组两种实现,<算法导论>第五章第三节 * 本文地址:http://mushiqianmeng.bl ...

  6. ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)

    ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式) 目录 基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两 ...

  7. c语言返回二叉树的大小,C语言中计算二叉树的宽度的两种方式

    C语言中计算二叉树的宽度的两种方式 二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth( ...

  8. 指针数组下标JAVA_Java语言中可用下标和指针两种方式表示数组元素。

    [判断题]一行可以写多条预处理命令 [判断题]如果一个java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名一致. [判断题]Protected类型的实例变量只能在本类中使用,其他类中不可 ...

  9. 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】

    引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...

最新文章

  1. 内存问题分析的利器——valgrind的memcheck
  2. Linux常用压缩解压命令
  3. fetchtype 动态控制_RouterOS利用aliyun的API接口实现DDNS动态解析
  4. WorldWind源码剖析系列:外包围盒类BoundingBox和外包围球类BoundingSphere
  5. Java 图形用户界面(GUI)java.awt包概述
  6. 钉钉扫码登录的实现 与OAUTH2.0
  7. 手机游戏量产引擎研发手记-导读
  8. Shell-cat url-list.txt | xargs wget -c
  9. 基于matlab的电力系统输电仿真,基于MATLAB电力系统线路运行的仿真与分析
  10. 《人月神话》阅读心得
  11. 漂亮的字体 手写_20种漂亮的草书和手写字体可供下载
  12. mysql leader/followers_Leader/Followers 模式
  13. 珠海网站建设需要多少钱?
  14. 1000人 规模园区网设计
  15. 从员工到总经理的成长笔记:自慢(6)
  16. 安装phpnow服务[Apache_pn]提示失败的解决方法
  17. Godaddy域名申请及设置
  18. mysql 索引底层数据结构与算法
  19. python语言画图代码_零: python matplotlib 画图进阶(含完整代码)
  20. java debug非同期ski,简记kafka group id相同导致的不同consumers启动后不消费和延时消费问题...

热门文章

  1. 菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty
  2. 创建模块化程序(二)
  3. 将集合中的内容按时间排序
  4. Uncaught ReferenceError: angular is not defined
  5. 理解JavaScript中的事件
  6. Android开发之通过接口回调机制加载数据(源代码分享)
  7. 自定义最大高度的ViewGroup
  8. Please ensure JDK installation is valid and compatible with the current OS
  9. 算法-----数组------ 数组中的第K个最大元素
  10. Android 自定义debug.keystore