一、BubbleSort核心思想
---通过循环依次**比较相邻两个数**的大小,如果不满足大于\小于的条件,则进行交换,再和下一个数进行比较,直到本趟结束,每趟排序找出最大\最小的数放到最后。
图解:
二、代码实现
public void BubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
三、优化处理
/**
* 1.每趟排序结束后,放在数组最后的元素都是默认已经有顺序的了
* 所以我们可以减去i,就是排序的趟数
* 2.只发生交换,才会进入if条件中
* 我们可以定义一个flag,来确认本趟排序是否进行了交换
*/
public void BubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
if (flag) { //表示没有进行比较交换,此时数组内数据已经有序了
break;
}
}
}