一.什么是冒泡排序:
一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
二.原理
每次比较相邻两数 小的交换到前面 每轮结束后最大的数交换到最后
通过下面这个图片来了解冒泡排序的原理:
三.代码理解
public static void main(String[] args) {
// 冒泡排序
int[] nums = { 11, 56, 94, 78, 33 };
// 排序前输出数组
System.out.println("排序前的数组:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
// 外层循环控制行数(外控循环控制比较的轮数)
for (int i = 0; i < nums.length - 1; i++) {
// 内层循环控制列数(内层循环控制每一轮的比较次数)
for (int j = 0; j < nums.length - 1 - i; j++) {
// 比较:如果前面的元素比后面的元素大,交换位置
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
System.out.println("排序后的数组:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
}
四.通过题目来理解
用二重循环将5个数字升序排序
- 5个数字如何存放
- 数组,数组.length = 5
- 控制比较多少轮
- 外层循环,循环变量 i
- 控制每轮比较多少次
- 内层循环,循环变量 j
- 交换数据
public static void main(String[] args) {
// 使用冒泡排序对输入的5名学员成绩进行降序排列
// 创建Scanner类对象
Scanner sc = new Scanner(System.in);
// 准备好长度为5的数组用来存储5名学员的成绩
double[] scores = new double[5];
// 从键盘输入5位学员的成绩并存储在数组中
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "位学员的成绩:");
scores[i] = sc.nextDouble();
}
// 排序前输出5位学员的成绩
System.out.println("排序前:");
for (double d : scores) {
System.out.print(d + " ");
}
System.out.println();
// 降序排序
for (int i = 0; i < scores.length - 1; i++) {
for (int j = 0; j < scores.length - 1 - i; j++) {
if (scores[j] < scores[j + 1]) {
double temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
System.out.println("排序后:");
for (double d : scores) {
System.out.print(d + " ");
}
}