对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前往后移动。如:
原始:3 9 -1 10 -2
第一次移动:
3 9 -1 10 -2
3 -1 9 10 -2
3 -1 9 10 -2
3 -1 9 -2 10
第二次移动:
-1 3 9 -2 10
-1 3 9 -2 10
-1 3 -2 9 10
第三次移动:
-1 3 -2 9 10
-1 -2 3 9 10
第四次移动:
-2 -1 3 9 10
规则:
- 一共进行(数组大小-1)次大循环
- 每一次大循环中的排序次数主键减少
- 若在某趟排序中,未发生交换,可提前结束,实现优化 代码:
public static void bubbleSort(int[] arr) {
int temp = 0;//临时变量
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;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if (!flag)
{
break;//在一趟排序中未发生交换
}
else
{
flag = true;//重置flag
}
}
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}