C语言冒泡排序算法详解
冒泡排序算法,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语言冒泡排序算法详解相关推荐
- 冒泡排序算法,C语言冒泡排序算法详解
冒泡排序是最简单的排序方法,理解起来容易.虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握. 冒泡排序的原理是:从左到右,相邻元素进行比较.每次比较一轮,就会找到序列中最大的一个或 ...
- 十大经典排序算法-冒泡排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- php详解冒泡排序,PHP冒泡排序算法详解
在学习时我们经常会被老师拿几个数字来让大家进行各种排序,下面我来给各位同学介绍一下PHP冒泡排序算法,大家可直接合去给你老题师哈. 排序实现过程如下: 49 38 65 97 76 13 27 38 ...
- 1. 冒泡排序算法详解
冒泡排序 冒泡排序是一种简单的排序算法.具体操作是重复地走访要排序的数列,没走过一个值,就会将前一个和该值比较,如果他们顺序错误,怎交换位置,否则不交换位置,直到没有错误顺序为止.因此就可以直到,对于 ...
- C++ 实现冒泡排序 算法详解
原理 算法简介 冒泡排序:通过不断比较数组中两个数的位置,按照一定顺序(升序或者降序)将每个数字一点一点排好. 举例说明 需要排序数组: 1 2 3 4 5 要求将其从大到小重新排序,则步骤为: Ro ...
- 经典排序算法(1)——冒泡排序算法详解
冒泡排序是一种交换排序. 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止. 一.算法基本思想 (1)基本思想 冒泡排序的基本思想就是: ...
- C语言——冒泡排序(分析详解)
冒泡排序 文章目录 冒泡排序 排序算法的介绍 排序的分类 (1)内部排序: (2)外部排序法: [重点]冒泡排序 1.基本介绍 2.冒泡排序应用实例 3.分析冒泡的过程+代码 排序算法的介绍 排序也称 ...
- c语言—冒泡排序(详解)
目录 一.了解冒泡排序 二.冒泡排序的实现 字符数组 算法实现 一.了解冒泡排序 冒泡排序(Bubble Sort):相比起二分法查找只能应用于有序数列,冒泡排序可以将无序数列变为有序数列:冒泡排序, ...
- c语言冒泡排序(c语言冒泡排序法详解)
请讲解下C语言的冒泡排序法 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样 ...
- smo算法C语言,SMO算法详解
一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练 数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问 ...
最新文章
- java io删除文件_java IO 文件操作方法总结
- 【编译原理】语言的定义
- linux go环境安装和基本项目结构
- 软件构造学习笔记-第十三周
- Java的一些基础知识深入
- 11.Axis客户端接收不同参数类型
- linux系统编程shell,Linux系统中的 Shell 编程
- java项目没有xml,利用eclipse新建的java web项目没有部署描述符web.xml文件怎么办?...
- hasp运行不成功_国内首条ZA-PPV电缆成功运行50天 新电缆有啥不一样?
- matlab语音信号处理/滤波器降噪/时域频域、归一化图谱
- 图相似度模型(论文篇)
- 阿里云授权和子账号登录
- 第一章第六天Java基础语法 嵌套循环
- 小学生python游戏开发pygame5--title地图调用
- android 渐变的背景色,Android背景渐变xml
- 案例21:Java农产品供求信息系统设计与实现开题报告
- An Actor–Critic based controller for glucose regulation in type 1 diabetes
- JAVA校招基础面试题
- Seata-server 1.4.0下载及安装(附百度云下载地址)
- 设计模式还有行为模式。。。