思路分析图
两个指针一起往后移动,比较大小逆序就交换,完成一趟则可以确认一个最大的数。
继续下一趟确认第二个较大的数
代码实现
import java.util.Arrays;
/**
* 冒泡排序
* 第一趟,比较相邻的两个(第i和i+1位置的)逆序则交换,i++后继续此操作,直到到 数组结束,完成一趟,此时最后一个即为最大的。
* 开始下一趟 只需要将前length-1个数字进行上述过程
* 直到最后一趟就剩一个数,结束排序
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {2, 4, 1, 6, 3, 9};
// int[] arr = {1,2,3,4,5,6};
int temp;
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = false;
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;
}
}
System.out.println("第" + (i + 1) + "趟排序:");
System.out.println(Arrays.toString(arr));
if (!flag) {
//如果这一趟没有发生过变化,则可以提前结束排序
break;
}
}
System.out.println("排序结果:");
System.out.println(Arrays.toString(arr));
}
}