冒泡排序(BubbleSort)
1.冒牌排序原理:
1)比较相邻两个元素大小,若第一位数字大于第二位数字则交换二者
2)按照1中方法移动后,最后一位数字将会是最大数字,那么他的位子被固定,即已经被排序
3)将除最后一位数字前的数字继续进行1种方法比较,直到没有任何一对数字需要比较。冒泡结束
2.冒泡排序的图示:
假设待排序序列为 (3,4,2,1),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:
1)第一次排序
已排序 | 未排序 |
2)第二次排序
3)第三次排序
3)冒泡排序代码:
public 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]) {
a[j] = a[j] ^ a[j+1];
a[j+1] = a[j] ^ a[j+1];
a[j] = a[j] ^ a[j+1];
}
}
System.out.println("第" + (i + 1) + "次排序" + Arrays.toString(a));
}
}
4)冒泡排序代码优化
public void Bubble(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]) {
flag=true;
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
}
}
if (!flag){
break;
}else {
flag=false;
}
System.out.println("第" + (i + 1) + "次排序" + Arrays.toString(a));
}
}
本博文当作初学数据结构与算法萌新的学习笔记,可能会有欠缺错漏之处,欢迎指正,大家一起进步吧!