个人理解
冒泡排序的思想是:一组无序数据从第一个元素开始按照一定规则(从小到大 还是从大到小)元素两两交替进行比较,交换。直到最后一个元素(其实到倒数第二个元素就行),就行气泡一样元素会按照规定大或小的元素一层一层冒出来排在最后,最终就称为了一个有序序列。
动图演示:
java代码实现
public class BubbleSort {
public static void main(String[] args) {
// 无序数组
int[] arr = {5, 4, 54, 3, 45, 85, 1, 51};
// 比较次数
for (int i = 0; i < arr.length -1; i++) {
// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
boolean flag = true;
// 进行比较
// 减 1 是为了防止数组越界
// 将 i 是为了 将已经排好序的元素不在参与再次比较
for (int j = 0; j < arr.length - i -1; j++) {
if (arr[j] > arr[j + 1]) {
int tem = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tem;
flag = false;
}
}
if (flag) {
break;
}
}
for (int i : arr) {
System.out.println(i);
}
}
}
说明
1.什么时候最快?
给定数组元素为有序数列 ,此时时间复杂度为O(n)
2.什么时候最慢?
给定数组元素从头到尾都是无序的 ,此时时间复杂度为O(n^2)
3.算法稳定性:稳定