问题描述
冒泡排序是一种简单的常见的排序算法,算法重复的走访排序的数组,通过不断的两两比较,最终把最大数浮于上方,好比是可乐的气泡冒泡的过程,所以生动的称之为“冒泡排序”。
接下来,将用java的方式进行编写。
解决方案
1流程图
2流程描述
比较相邻两个数,如果下标小的数大于了下标大的数,则交换两个数的位置。
按照上述方法,从第一个数开始比较,知道比较到最后一个数结尾,最后的数,则是该数组的最大值。
比出一个数后,继续比较,直到所有数都比较一次。直到没有数的顺序可以交换为止。
3生活实例
体育课上,老师让我们按照身高排位置,就是利用的冒泡算法。
4问题解决
4.1第一趟排序
我们拿到问题,大多数时候是不能一次性解决的,所以我先将第一趟排序实现,再做后面的研究。
public class BubbleSort {
public static void main(String[] args) {
//定义一个待处理数组
int[] arr = {2, 0, 5, 9, 8, 4, 3, 1, 6, 7};
//定义中间变量,用于后面的元素交换
int invar = 0;
for (int i = 0; i <arr.length-1 ; i++) {
if (arr[i]>arr[i+1]){
//交换顺序
invar = arr[i+1];
arr[i+1] = arr[i];
arr[i] = invar;
}
//打印每次的交换结果
System.out.println(Arrays.toString(arr));
}
}
}
4.2完整代码
public class BubbleSort {
public static void main(String[] args) {
//定义一个待处理数组
int[] arr = {2, 0, 5, 9, 8, 4, 3, 1, 6, 7};
int invar = 0;
for (int j = 0; j <arr.length-1 ; j++) {
for (int i = 0; i <arr.length-1-j ; i++) {
if (arr[i]>arr[i+1]){
//交换顺序
invar = arr[i+1];
arr[i+1] = arr[i];
arr[i] = invar;
}
System.out.println(Arrays.toString(arr));
}
}
}
}
结果如下:
结语
冒泡排序是非常经典的算法,问题本身不难,需要学习的是解决问题的思路。当遇到一个复杂的问题时,应该先从简单入手,把问题简单化。比如这次的冒泡排序,可以先完成一次排序,再来完成后面的多次排序,逐步优化代码。
END
主 编 | 王文星
责 编 | 王 宇
where2go 团队