package demo09;
import java.util.Arrays;
/**
* @Author: micro cloud fly
* @Description: 冒泡排序
* @Date: Created in 4:39 下午 2020/9/27
*/
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{
1, 90, 9, 8, 5, 7, 10
};
System.out.println(Arrays.toString(mySort(arr)));
}
/**
* 我理解的冒泡排序
* @param arr
* @return
*/
public static int[] mySort(int[] arr) {
if (arr == null || arr.length < 2) {
return arr;
}
for (int i = 0; i < arr.length - 1; i++) {
System.out.println("第 --i--" + i + "次排序:" + Arrays.toString(arr));
//第一轮,我取出第一个值和第二个值进行比较
//如果第一个值大于第二个值,那么他们的位置进行交换
//然后第一个值和第三个值进行比较,如果第一个值大于第三个,继续进行交换
//那么此时,第一轮过后,数组的第一个值就应该是最小的那个数字了
//-------------
//第二轮,我取出第二个值和第三个值进行比较
//如果第二个值大于第三个值,那么他们的位置进行交换
//然后第二个值和第4个值进行比较,如果第二个值大于第四个,继续进行交换
//那么此时,第二轮过后,数组的第二个值就应该是第二小的那个数字了
//--------
//直到最后一轮,最大的数字就在最后面了
//我的思想跟老师教的思想的不同点就是,老师教的每一轮比较大小都把最大的数字放在最后面,
//而如果我的代码的if (arr[i] > arr[j]) 改为if (arr[i] < arr[j]),那么我的思想就是每一轮比较把最大的值放在最前面
for (int j = i + 1; j < arr.length; j++) {
int x = arr[i];
int y = arr[j];
if (arr[i] < arr[j]) {
arr[j] = x;
arr[i] = y;
}
System.out.println("第 --j--" + i + "次排序:" + Arrays.toString(arr));
}
System.out.println("-----------------------------------------------");
}
return arr;
}
/**
* 老师教的冒泡排序
* @param arr
* @return
*/
private static int[] bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return arr;
}
for (int i = 0; i < arr.length - 1; i++) {
System.out.println("第 --i--" + i + "次排序:" + Arrays.toString(arr));
for (int j = 0; j < arr.length - i - 1; j++) { // 这里说明为什么需要-1
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
System.out.println("第 --j--" + i + "次排序:" + Arrays.toString(arr));
}
System.out.println("-----------------------------------------------");
}
return arr;
}
}