一、思路
- 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
3 | 9 | -1 | 1 | 20 |
3 | -1 | 9 | 1 | 20 |
3 | -1 | 1 | 9 | 20 |
3 | -1 | 1 | 9 | 20 |
- 接着上面进行第二轮遍历每次取下标为i 和 i+1 的两个数进行比较
-1 | 3 | 1 | 9 | 20 |
-1 | 1 | 3 | 9 | 20 |
-1 | 1 | 3 | 9 | 20 |
- 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
- 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
二、结论
- 给出了 z 个数 咱遍历 i 次(i = z -1)。当遍历i = 0 次时,咱又遍历了 j 次(j = z - 1 - i).
for (int i = 0; i < array.length; i++) {
//int flag = 0;
for (int j = 0; j < array.length -1 - i; j++) {
- 每次遍历取出角标为 j 和 j + 1 两个数进行比较,若前者比后者大,则进行交换,反之继续比较.
if (array[j] > array[j + 1]){
int temp = 0;
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
//flag++;
}
- 当遍历i = n 次时,一次前者与后者的交换都没有,那么可以提前结束循环,返回数组。
if (flag == 0){
return array;
}
三、代码
public class BubbleSort {
public static void main(String[] args) {
int[] array = new int[]{3, 9, -1, 10, 20};
int[] sore = sore(array);
System.out.println(Arrays.toString(sore));
}
public static int[] sore(int[] array) {
for (int i = 0; i < array.length; i++) {
int flag = 0;
for (int j = 0; j < array.length -1 - i; j++) {
if (array[j] > array[j + 1]){
int temp = 0;
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag++;
}
}
if (flag == 0){
return array;
}
}
return array;
}
}