一 . 冒泡法的描述
冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的 元素 ,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。. 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
假如我们要把 12、35、99、18、76 这 5 个数从大到小进行排序,那么数越大,越需要把它放在前面。冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据)。
我们从后开始遍历,首先比较 18 和 76,发现 76 比 18 大,就把两个数交换顺序,得到 12、35、99、76、18;接着比较 76 和 99,发现 76 比 99 小,所以不用交换顺序;接着比较 99 和 35,发现 99 比 35 大,交换顺序;接着比较 99 和 12,发现 99 比 12 大,交换顺序。最终第 1 趟排序的结果变成了 99、12、35、76、18,排序的过程如图 1 所示。
图 1 第 1 趟冒泡排序的过程示例
经过第 1 趟排序,我们已经找到了最大的元素,接下来的第 2 趟排序就只对剩下的 4 个元素排序。第 2 趟排序的过程示例如图 2 所示。
二. 排序步骤
1.一共进行数组的大小 -1 次大的排序
2.大循环每一趟嵌套的循环经行 数组大小 减去第几趟排序
3.如果在某趟排序中 没有发生交换 可以设置变量 提前结束;
三 . 代码实现
-
package c06Sort;
-
-
import java.util.Arrays;
-
-
public
class
BubbleSort {
-
-
public
static
void
main
(String[] args) {
-
//测试时只需要改变这里传入的数组数据
-
int arr[] = {
33,
5,
2,
9,
1,
3};
-
System.out.println(
"排序前的数组");
-
System.out.println(Arrays.toString(arr));
-
-
Bubble(arr);
-
System.out.println(
"\n排序hou的数组");
-
System.out.println(Arrays.toString(arr));
-
-
}
-
-
//冒泡排序的算法
-
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 -
1 - i; 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;
-
// 要重新赋值 ,不然下次不能排序了
-
}
-
System.out.println(
"\n第" + (i +
1) +
"趟排序");
-
System.out.println(Arrays.toString(arr));
-
}
-
}
-
-
}
四. 运行结果
这里有设置变量 所以只要在某一次没做交换就是有序了,直接跳出循环,节省时间