1. 比较相邻的元素, 如果第一个比第二个大, 则交换。
2.交换后继续对交换后的元素和元素的下一个元素做比较,如不交换,则直接跳到挑一个元素与他相邻的元素比较。
3.一直重复以上步骤,直至最后一个,这样子就筛选出了一个最大数。
4.除去筛选好数的不在比较,所有元素再次进行以上步骤,直到没有任何一组元素需要比较。
未优化的冒泡排序
public class TestBubbleSort {
public static void main(String[] args) {
int[ ] values = { 3, 1, 6, 8, 9, 0, 7, 4, 5, 2 };
bubbleSort(values);
System.out.println(Arrays.toString(values));
}
public static void bubbleSort(int[ ] values) {
int temp;
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values.length - 1 - i; j++) {
if (values[j] > values[j + 1]) {
temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;
}
}
}
}
}
优化后的
public static void bubble(int[] arr){
int temp = 0;
//标记数组是否已达到有序状态
boolean flag = false;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1]){
//发生了交换,则需要继续比较
flag = true;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
//如果内部循环结束, 还是有序的, 则结束
if (!flag) {
break;
} else {
flag = false;
}
}
}