冒泡排序
-
分析冒泡排序:数组[55,99,66,88,77,33] 第一轮排序目标:把最大数放在最后,确定出最大数为99. 第1次比较,第1、2两数比较[55,99,66,88,77,33] 第2次比较,第2、3两数比较[55,66,99,88,77,33] 第3次比较,第3、4两数比较[55,66,88,99,77,33] 第4次比较,第4、5两数比较[55,66,88,77,99,33] 第5次比较,第5、6两数比较[55,66,88,77,33,99] 数组个数-1次比较 第二轮排序目标:把第二大数放在倒数第二个位置。 第1次比较,第1、2两数比较[55,66,88,77,33,99] 第2次比较,第2、3两数比较[55,66,88,77,33,99] 第3次比较,第3、4两数比较[55,66,77,88,33,99] 第4次比较,第4、5两数比较[55,66,77,33,88,99] 此时5、6两数没有比较的必要。因为第一轮已经将最大的数放在后面。 第三轮排序目标:把第三大数放在倒数第三个位置。 第1次比较,第1、2两数比较[55,66,77,33,88,99] 第2次比较,第2、3两数比较[55,66,77,33,88,99] 第3次比较,第3、4两数比较[55,66,33,77,88,99] 第四轮排序目标:把第四大数放在倒数第四个位置。 第1次比较,第1、2两数比较[55,66,33,77,88,99] 第2次比较,第2、3两数比较[55,33,66,77,88,99] 第五轮排序目标:把第五大数放在倒数第五个位置。 第1次比较,第1、2两数比较[33,55,66,77,88,99] 冒泡排序特点总结: 1.一共6个(n个)元素,进行了5次(n-1)次排序,可以看成外层循环 2.每一轮排序可以确定一个数的位置。比如:第一轮排序确定最大数,第二轮确定第二大,以此类推。 3.当从小到大进行比较时,如果前面的数大于后面的数,就交换两数的顺序。 4.每一轮的比较在减少,因为每一轮确定一个数,相当于数组变小。 -
冒泡排序代码实现
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {55, 99, 66, 88, 77, 33};
int temp = 0;
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]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第" + (i + 1) + "轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
}
}
}
比对笨办法展开:
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {55, 99, 66, 88, 77, 33};
int temp = 0;
for (int j = 0; j < 5; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("==第一轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
for (int j = 0; j < 4; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第2轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
for (int j = 0; j < 4; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第3轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
for (int j = 0; j < 4; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第4轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
for (int j = 0; j < 4; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第5轮排序后==");
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
}
}
积累经验:idea截图alt+A需要登陆QQ或微信。
|