1. 什么是冒泡排序
1.1 算法了解
难度定位:属于计算机领域的初级算法,对初学者来说,可能感觉思路上比较饶。
名字由来:液体气泡从深向浅冒泡时,气泡会由小到大变化。在这里形象地指数值从小到大的排序算法。
1.2 算法思路
- 可以脑补下这个场景:体育课站队时,老师让一个随机排列的队列,按个子从低到高的排序过程。
- 将思维类比过来就是,先遍历要排序的元素,依次比较两个相邻的元素,若前者比后者大就交换位置。直到排序完成。
1.3 算法思路图解
图1:一个随机站位的队列
图2:两两比较,前者比后者大就交换位置,这样一轮下来,各自最高的在最后
图3:按照图2的思路,比较到2号即可,这样一轮下来,队列如下
图4:剩下0号和1号,比较后,排序完成
2.冒泡排序思路拆分
- 先会将最大值对应的元素放大最后,思路:遍历并判断是否需要交换2个变量的值,代码如下(Java):
//定义一个数组
int[] arr = {8,4,0,1,7,3,5,2};
//将数组中的最大的元素放在最后的位置
for(int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
- 再将第2大的元素放到对应的位置(注意和上次排序代码的变化)
//将数组中的第2大的元素放在数组对应的位置
for(int i=0;i<arr.length-2;i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
- …以此类推,其实,不断的将对应的数方法对应的位置,最后排序完成。可以将前面用到的循环改成for循环的嵌套。
for(int k=1;k<=arr.length-1;k++){
for(int i=0;i<arr.length-k;i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
3.此算法可以优化,初学者先到这里即可…