冒泡排序是非常容易理解和实现,以从小到大排序举例:

设数组长度为N。

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

按照定义很容易写出代码:

复制代码 代码如下:

//冒泡排序1

void BubbleSort1(int a[], int n)

{

int i, j;

for (i = 0; i < n; i++)

for (j = 1; j < n - i; j++)

if (a[j - 1] > a[j])

Swap(a[j - 1], a[j]);

}

下面对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。

复制代码 代码如下:

//冒泡排序2

void BubbleSort2(int a[], int n)

{

int j, k;

bool flag;

k = n;

flag = true;

while (flag)

{

flag = false;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j])

{

Swap(a[j - 1], a[j]);

flag = true;

}

k--;

}

}

再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。

复制代码 代码如下:

//冒泡排序3

void BubbleSort3(int a[], int n)

{

int j, k;

int flag;

flag = n;

while (flag > 0)

{

k = flag;

flag = 0;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j])

{

Swap(a[j - 1], a[j]);

flag = j;

}

}

}

冒泡排序毕竟是一种效率低下的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。

C语言冒泡排序三种写法,冒泡排序的三种实现方法相关推荐

  1. react如何获取option的下标和值_select选中获取索引三种写法

    $('#someId').prop('selectedIndex'); $('option:selected', '#someId').index(); $('#someId option').ind ...

  2. vue单文件props写法_详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...

  3. Vue——05-02组件的数据、为什么data要使用函数、父组件给子组件传递数据的三种写法、父传子以及传两种以上的值、默认值以及父传子的引用类型

    目录 在组件中获取数据 二.组件中的data为什么必须要是函数? 父组件给子组件传递数据--props属性 第一种写法: 第二种写法: 第三种写法: 传默认值 : 父组件传子组件数据--引用类型的两种 ...

  4. java多线程的写法三个线程_Java多线程的几种写法

    Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口: 1.继承Thread方法 class TestThread ...

  5. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  6. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...

  7. C++ Swap函数有几种写法?

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104344435 S ...

  8. KandQ:单例模式的七种写法及其相关问题解析

    设计模式中的单例模式可以有7种写法,这7种写法有各自的优点和缺点: 代码示例(java)及其分析如下: 一.懒汉式 public class Singleton {private static Sin ...

  9. (五)Vue之data与el的两种写法

    文章目录 el的两种写法 data的两种写法 Vue学习目录 上一篇:(四)Vue之数据绑定 下一篇:(六)Vue之MVVC 容器: <div id="root">&l ...

  10. HTML5学习_day01(6)--html颜色的几种写法

    颜色的几种写法 1.颜色第一种写法:用颜色名来表示,red,blue,green,pink,dark,yellow等 background-color: green; 效果: 2.颜色第二种写法:通过 ...

最新文章

  1. 深度学习正改变物理系统模拟,速度最高提升20亿倍那种
  2. DevExpress中透明玻璃效果
  3. 回归!这里才是我们的天堂
  4. pandas的DataFrame转化为Datatable的DataFrame
  5. 定期存单丢了被别人捡到,里面的存款会不会被领走?
  6. python可以实现操作系统管理_Python并发编程 —— 操作系统基础
  7. jquery出现“为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项...”的解决办法
  8. 使用Kotlin的Android菜单
  9. php从入门到精通分享,PHP从入门到精通学习路线图分享
  10. SCI论文降重技巧盘点 - 易智编译EaseEditing
  11. codeql 代码审计
  12. 《FLUENT 14流场分析自学手册》——2.3 FLUENT14.5软件包的安装以及运行
  13. java gbk转机内码_\xd5\xd2\xb2\xbb\xb5\xbd\xd6 gbk内码转中文方法
  14. 微信公众号推文(编辑+排版教程)
  15. 前端实现旗帜飘动效果系列 (Ⅰ):dom+css实现
  16. 忘记手机密码怎么用计算机解开,手机忘记密码怎么办?教你三种方法帮你搞定!...
  17. 星星之火-19:手机如何与基站进行时钟同步、时隙同步?
  18. 位运算 之(1) 按位与(AND) 操作【转载】
  19. C++实现大数加减法
  20. 从Windchill说PLM的入门指南——(听听不专业小编的胡说八道)

热门文章

  1. 大道至简-第一张 伪代码
  2. SQLite的SQL语法
  3. Android 4.1初识--7月13号
  4. C#数组Array的基础知识及二位数组和数组的数组的区别
  5. C# in Depth
  6. ASP.NET中 TextBox控件使用 ReadOnly=true 属性
  7. 头文件不应该含有非inline函数或对象的定义
  8. effective python 90个有效方法_Effective Python:编写高质量Python代码的90个有效方法(原书第2版)...
  9. 拓端tecdat|R语言深度学习不同模型对比分析案例
  10. linux系统双网卡不能同时启动,Linux下双网卡绑定eth0,eth1启动失败