BubbleSort

打下基础,冒泡排序

6 3 5 2 4 1

Round 1
3 6 5 2 4 1
3 5 6 2 4 1
3 5 2 6 4 1
3 5 2 4 6 1
3 5 2 4 1 6

Round 2
3 5 2 4 1 6
3 2 5 4 1 6
3 2 4 5 1 6
3 2 4 1 5 6

Round 3
2 3 4 1 5 6
2 3 4 1 5 6
2 3 1 4 5 6

Round 4
2 3 1 4 5 6
2 1 3 4 5 6

Round 5
1 2 3 4 5 6

一共n个数排序,外层循环经过n-1轮完成,每轮沉下一个最大值,下一轮就少比较一个值;内层循环相邻两个比较,小的靠左,大的靠右,下标从0开始,根据外层变量的值,决定内层循环两两比较到何处

package Love;

/**
* Hello world!
*/

public class App {

public static void bubbleSort(int[] arr) {
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;
}
}
}
for (int num : arr) {
System.out.print(num);
}
}

public static void main(String[] args) {
int[] arr = {6, 4, 1, 3, 2, 5};
bubbleSort(arr);
}
}

有人指出,如果中间的交换过程,如果一轮里一次都没有执行,那说明顺序本身就已经排好了,不需要继续执行,直接return掉,所以,可以加一个flag

package Love;

/**
* Hello world!
*/

public class App {

public static void bubbleSort(int[] arr) {
int temp = 0, flag = 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;
flag = 1;
}
}
if (flag == 0) {
break;
}
}
for (int num : arr) {
System.out.print(num);
}
}

public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
bubbleSort(arr);
}
}

没执行过中间代码,直接跳出循环即可

发表回复