冒泡排序算法,C语言冒泡排序算法详解 (biancheng.net)

冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。

冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

比如对下面这个序列进行从小到大排序:

90  21  132  -58  34

第一轮:
1) 90 和 21比,90>21,则它们互换位置:

21  90  132  -58  34

2) 90 和 132 比,90<132,则不用交换位置。
3)132 和 –58 比,132>–58,则它们互换位置:

21  90  -58  132  34

4)132 和 34 比,132>34,则它们互换位置:

21  90  -58  34  132

到此第一轮就比较完了。第一轮的结果是找到了序列中最大的那个数,并浮到了最右边。

比较时,每轮中第 n 次比较是新序列中第 n 个元素和第 n+1 个元素的比较(假如 n 从 1 开始)。

第二轮:
1) 21 和 90 比,21<90,则不用交换位置。
2) 90 和 –58 比,90>–58,则它们互换位置:

21  -58  90  34  132

3) 90 和 34 比,90>34,则它们互换位置:

21  -58  34  90  132

到此第二轮就比较完了。第二轮的结果是找到了序列中第二大的那个数,并浮到了最右边第二个位置。

第三轮:
1) 21 和 –58 比,21>–58,则它们互换位置:

-58  21  34  90  132

2) 21 和 34 比,21<34,则不用交换位置。

到此第三轮就比较完了。第三轮的结果是找到了序列中第三大的那个数,并浮到了最右边第三个位置。

第四轮:
1) –58 和 21 比,–58<21,则不用交换位置。

至此,整个序列排序完毕。从小到大的序列就是“–58 21 34 90 132”。从这个例子中还可以总结出,如果有 n 个数据,那么只需要比较 n–1 轮。而且除了第一轮之外,每轮都不用全部比较。因为经过前面轮次的比较,已经比较过的轮次已经找到该轮次中最大的数并浮到右边了,所以右边的数不用比较也知道是大的。

下面写一个程序:

# include <stdio.h>
int main(void)
{int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};int n;  //存放数组a中元素的个数int i;  //比较的轮数int j;  //每轮比较的次数int buf;  //交换数据时用于存放中间数据n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/for (i=0; i<n-1; ++i)  //比较n-1轮{for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,{if (a[j] < a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}}for (i=0; i<n; ++i){printf("%d\x20", a[i]);}printf("\n");return 0;
}

输出结果是:
2500 900 543 532 76 56 43 35 34 32 3 2 -58 -70 -234

程序中,为什么每轮比较的次数是 j<n–1–i,而不是 j<n–1?

因为冒泡排序有一个特点,这个程序是从大到小排序,所以第一轮排序以后,最小的数就会浮到最右面;第二轮排序以后,第二小的数会浮到倒数第二个位置;第三轮排序以后,第三小的数会浮到倒数第三个位置……也就是说,排序多少轮,就有多少个数字已经按排序要求排好了,它们不需要再比较。写 j<n–1 也可以,只不过程序在执行时多做了许多无用功。

C语言冒泡排序算法详解相关推荐

  1. 冒泡排序算法,C语言冒泡排序算法详解

    冒泡排序是最简单的排序方法,理解起来容易.虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握. 冒泡排序的原理是:从左到右,相邻元素进行比较.每次比较一轮,就会找到序列中最大的一个或 ...

  2. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. php详解冒泡排序,PHP冒泡排序算法详解

    在学习时我们经常会被老师拿几个数字来让大家进行各种排序,下面我来给各位同学介绍一下PHP冒泡排序算法,大家可直接合去给你老题师哈. 排序实现过程如下: 49 38 65 97 76 13 27 38 ...

  4. 1. 冒泡排序算法详解

    冒泡排序 冒泡排序是一种简单的排序算法.具体操作是重复地走访要排序的数列,没走过一个值,就会将前一个和该值比较,如果他们顺序错误,怎交换位置,否则不交换位置,直到没有错误顺序为止.因此就可以直到,对于 ...

  5. C++ 实现冒泡排序 算法详解

    原理 算法简介 冒泡排序:通过不断比较数组中两个数的位置,按照一定顺序(升序或者降序)将每个数字一点一点排好. 举例说明 需要排序数组: 1 2 3 4 5 要求将其从大到小重新排序,则步骤为: Ro ...

  6. 经典排序算法(1)——冒泡排序算法详解

    冒泡排序是一种交换排序. 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止. 一.算法基本思想 (1)基本思想 冒泡排序的基本思想就是: ...

  7. C语言——冒泡排序(分析详解)

    冒泡排序 文章目录 冒泡排序 排序算法的介绍 排序的分类 (1)内部排序: (2)外部排序法: [重点]冒泡排序 1.基本介绍 2.冒泡排序应用实例 3.分析冒泡的过程+代码 排序算法的介绍 排序也称 ...

  8. c语言—冒泡排序(详解)

    目录 一.了解冒泡排序 二.冒泡排序的实现 字符数组 算法实现 一.了解冒泡排序 冒泡排序(Bubble Sort):相比起二分法查找只能应用于有序数列,冒泡排序可以将无序数列变为有序数列:冒泡排序, ...

  9. c语言冒泡排序(c语言冒泡排序法详解)

    请讲解下C语言的冒泡排序法 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样 ...

  10. smo算法C语言,SMO算法详解

    一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练  数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问 ...

最新文章

  1. java io删除文件_java IO 文件操作方法总结
  2. 【编译原理】语言的定义
  3. linux go环境安装和基本项目结构
  4. 软件构造学习笔记-第十三周
  5. Java的一些基础知识深入
  6. 11.Axis客户端接收不同参数类型
  7. linux系统编程shell,Linux系统中的 Shell 编程
  8. java项目没有xml,利用eclipse新建的java web项目没有部署描述符web.xml文件怎么办?...
  9. hasp运行不成功_国内首条ZA-PPV电缆成功运行50天 新电缆有啥不一样?
  10. matlab语音信号处理/滤波器降噪/时域频域、归一化图谱
  11. 图相似度模型(论文篇)
  12. 阿里云授权和子账号登录
  13. 第一章第六天Java基础语法 嵌套循环
  14. 小学生python游戏开发pygame5--title地图调用
  15. android 渐变的背景色,Android背景渐变xml
  16. 案例21:Java农产品供求信息系统设计与实现开题报告
  17. An Actor–Critic based controller for glucose regulation in type 1 diabetes
  18. JAVA校招基础面试题
  19. Seata-server 1.4.0下载及安装(附百度云下载地址)
  20. 设计模式还有行为模式。。。

热门文章

  1. 如何用好项目管理工具
  2. DSA_常用10种算法(java数据结构与算法)
  3. 算法——排序——插入排序图解动画
  4. Dempster-Shafer Evidence Theory
  5. MCU_ZigBee协议栈相关函数总结
  6. 图论及其应用:第二次作业
  7. 琴生Jensen不等式,条件期望
  8. 《华为战略管理法:DSTE实战体系》整体介绍
  9. 猎豹网校梁兴珍老师的python课程很不错
  10. 思科模拟器Cisco Packet Tracer 的安装与使用(汉化教程)