冒泡排序法
来源:互联网 发布:阿里云网站备案查询 编辑:程序博客网 时间:2024/05/18 03:45
排序经常用到,冒泡排序的思想,就是和水泡一样,浮向水面,一个一个地将最大或者是最小的那个数移止最前或者是最后的位置。不好表达,下面以程序为例子分析。
#include <iostream>using namespace std;int a[8] = { 100, 25, 58, 26, 6, 85, 75, 49 };void main(){int n = 8;int data = 0;//注意次数的i、j的初始化的值和后面的小于的起始范围for (int j = 0; j < n; j++){for (int i = 1; i < n- j; i++){if (a[i-1] > a[i]){data = a[i];a[i] = a[i - 1];a[i - 1] = data;}}}for (int m = 0; m < n; m++)cout << a[m] << endl;}运行结果如下
冒泡排序一般是两层for循环。第一层循排环的范围上限就是需要序点的个数,第二层for循环的起始可以是0也可以是1,这取决于循环的下面比较的时候,变量下标的写法。
在本次中,如果比较方式是a[i] < a[i-1],那么第二层循环的起始是1,因为要是i-1最小取值到0,则i的最小应该为1,第二层的上限就是n-j,因为当j=0的时候,i的最大取值就是n-1。如果下标是a[i] < a[i+1],则第二层的起始是0,第二层的上限是n-j-1,因为当j=0的时候,要是i+1的最大取值是n-1,所以上限是n-j-1。
第二层的上限,冒泡的思想是,比如在从小到大排序的时候,先将所有数中的最大的冒泡到数组顶端,再在剩余的n-1个数中冒泡最大的到数组的次顶端,依次类推。所以,上限是n-i,当i为3的时候,说明已将前三个最大的数已经被“冒泡”到数组最前面的三个位置。
总结下循环是下面两种方式:
/方式1for (int j = 0; j < n; j++){for (int i = 1; i < n - j; i++){if (a[i - 1] > a[i]){data = a[i];a[i] = a[i - 1];a[i - 1] = data;}}}//方式1for (int j = 0; j < n; j++){for (int i = 0; i < n - j -1; i++){if (a[i] > a[i+1]){data = a[i+1];a[i+1] = a[i];a[i] = data;}}}
其实对于冒泡法,第一次层的上限可以是n-1,也就是第一层循环可以只循环n-1次,因为当i = n -1的时候,n个数中已经有n-1个数“冒泡”好,所以第n个数就不需要再冒泡一次了。
综上:冒泡排序两层循环,第一层的起始是0,上限可以是n,也可以是n-1; 第二层循环的起始和上限由比较的下标决定。
0 0
- 【排序】冒泡排序法
- 常用排序-冒泡法排序
- 排序法之冒泡排序
- php排序&冒泡法排序
- 排序之冒泡排序法
- 排序算法--冒泡排序法
- 【PHP】冒泡排序法排序
- 排序算法--冒泡排序法
- 冒泡法排序
- 排序:冒泡法
- 冒泡排序法
- 冒泡法排序
- 冒泡法排序
- 冒泡排序法
- java 冒泡排序法
- 冒泡法排序
- 冒泡法排序
- 冒泡法排序
- PS中灰度图像如何查看像素值
- 过拟合的解决方法
- python学习(13)————jieba进阶生成词云
- 剑指Offer_54_字符流中第一个不重复的字符
- java自带线程池和队列详细讲解
- 冒泡排序法
- ROS+科大讯飞语音=让你的机器人能听会说---(三)识别篇
- mysql字符集介绍
- P NP NPC问题
- 关于String的操作及格式化
- 小米笔试题
- Foundation和UIKit框架组织图
- 后台模板下载
- 单例设计模式