冒泡排序就是通过for嵌套,来声明循环次数,并检索每一次循环的值,如果前者大于后者,则将他往后面冒。
import java.util.Arrays;
public class Bubble_optmize {
public static void main(String[] args) {
// 直接定义一个数组
int[] nums = {36, 26, 27, 2, 4, 19, 50, 48};
System.out.println("排序前的数组:" + Arrays.toString(nums));
sort(nums);
System.out.println("排序后的数组:" + Arrays.toString(nums));
}
/*
* 对数组进行冒泡排序
*
* @param nums 需要排序的数组
* */
private static void sort(int[] nums) {
// 记录最后一个交换的位置
int pos = 0;
// 临时变量 temp
int temp = 0;
// 外层循环控制排序趟数,len个进行len - 1趟
boolean flag =true;//定义一个标志位,用来判断是否完成了排序
for (int i = 0; (i < nums.length - 1)&&flag; i++) {
System.out.println("第" + (i + 1) + "趟:");
// 标记位
flag = false;//假设我们已经完成了排序
// 内层循环控制比较的次数,第i趟比较i-1次
for (int j = 0; j < nums.length - 1 - i; j++) {
// 比较相邻的两个元素,若前面的数字大于后面的,交换位置
if (nums[j] > nums[j + 1]) {
temp = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = temp;
flag = true;
// 如果能走到这里说明有有元素交换,还不是有序的,标记为false
// 最后一次交换元素的位置
pos = j;
}
System.out.println(" 第" + (j + 1) + "次:" + Arrays.toString(nums));
}
}
System.out.println("最后发生交换的位置"+pos);
}
}
对于代码当中的flag,是设置一个标记位,用来标识,此次有没有进行循环,若没有,则证明已经排序好了。