知识点-冒泡排序
什么式冒泡排序?
一种排序的方式,将需要排序的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,所有数据按要求完成排序。总的有n个数据,需要比较n-1次,每比较完成一次,下一次的比较就会少一个数据参与比较。
冒泡排序需求
将数组int[] arr = {6,8,7,10,9};用冒泡排序法按照从小到大的顺序进行排列。
冒泡排序法对数组进行排序的实现步骤
1、第一轮,把最大值10找出,并把它放到数组的最右边
//1、第一轮,把最大值10找出,并把它放到数组的最右边
//第一轮比较结果:7 9 6 8 10
for (int i = 0; i < arr.length - 1 - 0; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
2、第二轮,10不参与比较,将9找出来放到参与比较的数据的最右边
for (int i = 0; i < arr.length - 1 -1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
3、第三轮,10、9不参与比较,将8找出来放到参与比较的数据的最右边
for (int i = 0; i < arr.length - 1 -2; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
4、第四轮,10、9、8不参与比较,将7找出来放到参与比较的数据的最右边,剩下的6位置就只剩下最左边的位置。比较完毕
for (int i = 0; i < arr.length - 1 -3; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
5、完整代码实现如下:
public class bubbleSortDemo {
public static void main(String[] args) {
//printArrElement(arr)此方法为循环打印数组的方法;
int[] arr = {10,7,9,6,8};
//1、第一轮,把最大值10找出,并把它放到数组的最右边
//第一轮比较结果:7 9 6 8 10
for (int i = 0; i < arr.length - 1 - 0; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print("第一轮比较结果:");
printArrElement(arr);
//2、第二轮,10不参与比较,将9找出来放到参与比较的数据的最右边
//第二轮比较结果:7 6 8 9 10
for (int i = 0; i < arr.length - 1 -1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print("第二轮比较结果:");
printArrElement(arr);
//3、第三轮,10、9不参与比较,将8找出来放到参与比较的数据的最右边
//第三轮比较结果:6 7 8 9 10
for (int i = 0; i < arr.length - 1 -2; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print("第三轮比较结果:");
printArrElement(arr);
//4、第四轮,10、9、8不参与比较,将7找出来放到参与比较的数据的最右边,剩下的6位置就只剩下最左边的位置。比较完毕
//第四轮比较结果:6 7 8 9 10
for (int i = 0; i < arr.length - 1 -3; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print("第四轮比较结果:");
printArrElement(arr);
}
private static void printArrElement(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
运行结果:
采用循环嵌套来实现冒泡排序:
public class goodBubbleSortDemo {
public static void main(String[] args) {
int[] arr = {10,7,9,6,8};
bubbleSort(arr);
}
private static void bubbleSort(int[] arr) {
//外层循环控制的是总的比较次数,比较次数比总数据少1
for (int i = 0; i < arr.length -1; i++) {
//j < arr.length - 1 是数组索引最大值为数组长度减1
//j < arr.length - 1 - i,每一轮比较结束之后,参与比较的数据会少一个
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
运行结果如下: