冒泡排序
冒泡排序的动态演示
比较相邻的元素。
1,如果第一个比第二个大(升序),就交换他们两个。
2,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,
最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4, 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为
止。
冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/
2 排序思路
先给大家放几张图,让大家感受下冒泡排序是怎么排序的:
比如我现在有一组乱序的数据:
11 9 13 6 8 5,希望通过冒泡排序后得到从小到大按顺序排列的数据
首先开始第1轮的第1次比较:11与9进行比较,11>9,所以互换位置:
这是11与9互换位置后的结果,红线标注的就是当前正在比较的两个数据:
第1轮的第2次比较:11与13进行比较,11<13,符合顺序,无需互换位置:
第1轮的第3次比较:6与13进行比较,13>6,不符合顺序,这是互换位置后的结果:
第1轮的第4次比较:8与13进行比较,13>8,不符合顺序,这是互换位置后的结果:
第1轮的第5次比较:5与13进行比较,13>5,不符合顺序,这是互换位置后的结果:
目前第一轮所有元素都参与了比较,结果:9 11 6 8 5 13
第2轮的第1次比较:9与11进行比较,9<11,符合顺序,无需互换位置:
第2轮的第2次比较:11与6进行比较,11>6,不符合顺序,这是互换位置后的结果:
第2轮的第3次比较:11与8进行比较,11>8,不符合顺序,这是互换位置后的结果:
第2轮的第4次比较:11与5进行比较,11>5,不符合顺序,这是互换位置后的结果:
第二轮结果:9 6 8 5 11 13
第3轮的第1次比较:9与6进行比较,9>6,不符合顺序,这是互换位置后的结果:
第3轮的第2次比较:9与8进行比较,9>8,不符合顺序,这是互换位置后的结果:
第3轮的第3次比较:9与5进行比较,9>5,不符合顺序,这是互换位置后的结果:
第三轮结果:6 8 5 9 11 13
第4轮的第1次比较:6与8进行比较,6<8,符合顺序,无需互换位置:
第4轮的第2次比较:5与8进行比较,8>5,不符合顺序,这是互换位置后的结果:
第四轮结果:6 5 8 9 11 13
第5轮的第1次比较:6与5进行比较,6>5,不符合顺序,这是互换位置后的结果:
第五轮结果:5 6 8 9 11 13,到目前为止,排序完成
冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/
冒泡排序的代码实现
package com.tedu;
public class TestBubbleSort {
public static void main(String[] args) {
int[] arr = {6,9,2,9,1};
//目标:从小到大
//冒泡排序的轮数 = 元素的总个数 - 1
//轮数是多轮,每一轮比较的次数是多次,需要用到双重循环,即循环嵌套
//外循环控制 轮数,内循环控制每一轮的比较次数和过程
for(int i=1; i<arr.length; i++){ //循环次数是 arr.length-1 次/轮
for(int j=0; j<arr.length-i; j++){
//希望的是 arr[j] < arr[j+1]
if(arr[j] > arr[j+1]){
//交换 arr[j]与 arr[j+1]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//到这里元素的顺序已经排序完成,下一步我们通过遍历查看排序后的结果
}
}
}
//完成排序,遍历结果
for(int i=0; i<arr.length; i++){
System.out.print(arr[i]+" ");
}
}
}