版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BLUE5945/article/details/81270609
介绍
1.冒泡排序同样属于交换排序
2.冒泡排序的基本思路为:
比较相邻元素的大小,如果元素大于(小于也行,看你要从大到小,还是从paixun小到大)下一个元素,则交换,然后比较下一个元素和下下一个元素,这样一次的冒泡排序就会使一个最大值(最小值)排在顶端,如果总共有n个元素,那么只需n-1次(这个可以优化,待会会讲)这样的冒泡排序就可以将所有元素排序
分析
下面我以简单的[1, 4, 2, 8, 5, 3]为例,画图解释一下
代码
public static void bubbleSort(int[] arr) {
int len = arr.length;
for(int i = 0; i < len - 1; i++) {
// 设置一个标识位,当一次排序没有交换时,即数组所有元素的顺序已经是正确的了,这就是之前说的优化
boolean flag = false;
// 一次循环,选出最大的一个元素
for(int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
// 当没有交换时,直接结束循环
if(!flag) {
break;
}
}
}
算法分析
1.时间复杂度为
2.空间复杂度为
3.由于在每一次排序时,除了最大或者最小的元素位置变了之外,其他元素的相对位置不会发生变化,因此冒泡排序呢是一种稳定的排序算法