原理
每轮相邻两个数据进行比较,如果两者比较不相等,较大的数据和较小的数据交换,较大的数据往后面移动,较小的数据往前移动,移动后再于下一个数据进行比较和交换,一直到最后。
过程
例如:
int[] array = {3,2,0,-1,7};
第一轮:
| 原数组(第一轮第一次比较) | 第0个比第1个数据大,所以两个交换位置 |
|---|---|
| 3,2,0,-1,7 | 2,3,0,-1,7 |
| 交换后数组(第一轮叠第一次比较后) | 第1个比第2个数据大所以交换位置 |
| 2,3,0,-1,7 | 2,0,3,-1,7 |
| 交换后数组 (第一轮叠第二次比较后) | 第2个比第3个数据大,所以交换位置 |
| 2,0,3,-1,7 | 2,0,-1,3,7 |
| 交换后数组 (第一轮叠第三次比较后) | 第3个比第4个数据小,不用交换位置 |
| 2,0,-1,3,7 | 2,0,-1,3,7 |
第二轮:
| 第一轮比较后第一次比较 | 第0个比第1个数据大,所以两个交换位置 |
|---|---|
| 2,0,-1,3,7 | 0,2,-1,3,7 |
| 2、交换后数组 | 第1个比第2个数据大所以交换位置 |
| 0,2,-1,3,7 | 0,-1,2,3,7 |
| 3、交换后数组 | 第2个比第3个数据小,不用交换位置 |
| 0,-1,2,3,7 | 0,-1,2,3,7 |
| 4、交换后数组 | 第3个比第4个数据小,不用交换位置 |
| 0,-1,2,3,7 | 0,-1,2,3,7 |
第三轮:
| 第二轮比较后第一次比较 | 第0个比第1个数据大,所以两个交换位置 |
|---|---|
| 0,-1,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第二次比较) | 第1个比第2个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组 (第三次比较) | 第2个比第3个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第四次比较) | 第3个比第4个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
第四轮:
| 第三轮比较后第一次比较 | 第0个比第1个数据小,不用两个交换位置 |
|---|---|
| 0,-1,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第二次比较) | 第1个比第2个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第三次比较) | 第2个比第3个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第四次比较) | 第3个比第4个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
第五轮:
| 第四轮比较后第一次比较 | 第0个比第1个数据小,不用两个交换位置 |
|---|---|
| 0,-1,2,3,7 | -1,0,2,3,7 |
| 交换后数组 (第二次比较) | 第1个比第2个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第三次比较) | 第2个比第3个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
| 交换后数组(第四次比较) | 第3个比第4个数据小,不用交换位置 |
| -1,0,2,3,7 | -1,0,2,3,7 |
结果
比较过程如上:数据比较结束,一共比较了5轮,每轮比较了4次,比较条件是每轮中数组前一个数据是否大于后一个数据,故得出代码:
for(int x=0;x<array.length-1;x++) {
for(int y=0;y<array.length-1;y++) {
if(array[y]>array[y+1]) {
byte temp = array[y];
array[y] = array[y+1];
array[y+1] = temp;
}
}
}
小结
排序过程一定自己动手写一遍过程,这样其中的规律才能真正掌握。
最后
以上就是坦率日记本最近收集整理的关于冒泡排序的原理及比较过程的全部内容,更多相关冒泡排序内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复