冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
例如:要对一个数组进行排序
第一轮排序:
1.首先,6和4比较,6比4大,所以6和4交换位置。
2.接下来让6和3比较,6比3大,所以6和3交换位置。
3.继续让6和9比较,6比9小,所以不用交换位置。
4.最后让9和2比较,9比2小,所以9和2交换位置。
这个时候最大数9就排到数组的最后一位,就不需要再继续参与排序。
第二轮排序:
1.首先4和3比较,4比3大,所以4和3交换位置。
2.接下来让4和6比较,4比6小,所以不用交换位置。
3.最后让6和2比较,6比2大,所以6和2交换位置。
第三轮排序:
1.首先3和4比较,3比4小,所以不用交换位置。
2.接着4和2比较,4比2大,所以4和2交换位置。
第四轮排序
1.3和2比较,3比2大,所以3和2交换位置
算法的核心就是通过两两比较并且交换位置,选出剩余数组元素中最大或最小的元素放在队尾。
算法实现:
public class Test {
public static void main(String[] args) {
int[] arr = {6,4,3,9,2};
bubbleSort(arr);
}
public static void bubbleSort(int[] arr) {
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;
}
}
}
for(int i = 0; i<arr.length;i++) {
System.out.print(arr[i]); //2,3,4,6,9
}
}
}