冒泡排序
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
原理
-
首先定义一个数组
-
把它像冒泡一样排序
第一次 1 与 32 相比 1<32 不动 故数组为 {1, 32, 5, 75, 3, 4, 88} 未发生变化
第二次 32 与 5 相比 32>5 调换位置 故数组为 {1, 5, 32, 75, 3, 4, 88} 5与32 调换位置 大的在右边 冒泡继续向上升
第三次 32 与 75 相比 32<75 不动 故数组为 {1, 5, 32, 75, 3, 4, 88} 未发生变化
第四次 75 与 3 相比 75>3 调换位置 故数组为 {1, 5, 32, 3, 75, 4, 88} 3与75 调换位置 大的在右边 冒泡继续向上升
第五次 75 与 4 相比 75>4 调换位置 故数组为 {1, 5, 32, 3, 4, 75, 88} 4与75 调换位置 大的在右边 冒泡继续向上升
第六次 75 与 88 相比 75<88 不动 故数组为 {1, 5, 32, 3, 4, 75, 88} 未发生变化
第一轮结束 出现最大的 88 在最后 第二轮开始 继续这样相比
。。。。。。。
第二轮结束 :数组为 {1, 5, 3, 4, 32, 75, 88} 第二大出现 :75 内排序次数会减一 因为出现最大的数字了
第三轮结束 :数组为 {1, 3, 4, 5, 32, 75, 88} 第三大出现 :32 内排序次数会减一 因为出现最大的数字了
。。。。。。。
最后数组结果 {1, 3, 4, 5, 32, 75, 88}
排序结束
- 代码
int[] Bubbling = {1, 32, 5, 75, 3, 4, 88};
for (int i = 0; i < Bubbling.length-1; i++) {
for (int j = 0; j < Bubbling.length-1-i; j++) {
// 左右相比 若左边大于右边 则调换位置
if (Bubbling[j]>Bubbling[j+1]){
// 定义一个临时变量记录 左边的数字
int temp = Bubbling[j];
// 开始调换
Bubbling[j] = Bubbling[j+1];
// 把临时变量赋给右边的数
Bubbling[j+1] = temp;
}
}
System.out.println("第"+i+"轮:"+Arrays.toString(Bubbling));
}
System.out.println(Arrays.toString(Bubbling));
优化版本
public class BubbleSort {
public static void main(String[] args) {
int[] bubbling = {1, 32, 5, 75, 3, 4, 88};
bubbleSort(bubbling);
System.out.println(Arrays.toString(bubbling));
}
public static void bubbleSort(int[] arr) {
boolean flag = false; // 记录是否经过调换
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//进行调换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//经过调换 设置为true
flag = true;
}
}
//为false 说明没有经过调换 就跳过循环
if (!flag) {
break;
} else {
//经过了调换就给他 设置为false
flag = false;
}
}
}
}
记得微笑 !