1.冒泡排序
冒泡排序是一种排序算法,能够将一个无序数组变成一个从小到大的有序数组,冒泡排序是一个稳定排序,稳定排序是指如果值相同的元素在排序后仍然保持着排序前的顺序,则这样的排序算法是稳定排序。下边我们来来冒泡排序的具体实现
1.1冒泡排序的实现过程
冒泡需要执行数组长度减1次排序,每次排序将最大的数放到最后,给定一个原始数组[6,4,5,2,1]我们来通过下面动画来了解它是怎么每次将最大的一个数放到最后。
从上图中我们看到一共进行了4次排序,也就是数组长度减1次排序,每次排序相邻的两个数进行比较如果前一个数大于后一个数他们交换位子,如果小于位子不变,下面我们对这4次排序进行拆分
第一次:
第一次是对原始数组进行排序,原始数组为[6,4,5,2,1],首先6和4比较,6大于4,6和4交换位子,然后6再和5比较,6大于5,6和5交换位子,6再和2比较,6大于2,6和2交换位子,6再和1比较,6大于1,6和1交换位子。如下图所示就是数组的第一次交换
第二次
第二次只需要再从[4,5,2,1]选出最大值即可,首先4和5进行比较,4小于5,位子不变,5和2比较,5大于2,5和2交换位子,5再和1比较,5大于1,5和1交换位子,第二次排序结果如下图
第三次
第三次只需再从[4,2,1]选出最大值即可。首先4和2进行比较,4大于2,4和2位子交换,4再和1比较,4大于1,4和1进行位子交换
,排序交过如下图
第四次
第四次只需再从[2,1]中选出最大值即可,首先2和1进行比较,2大于1,2和1进行交换,排序结果如下图。
至此4次排序全部结束,数组变成了有序数组。
1.2时间复杂度和空间复杂度
从上面我们可以看出冒泡排序需要进行n-1+n-2+…+1次比较,所以他的时间复杂度为o(n²),空间没有用多余的空间所以空间复杂度o(1)。
1.3代码实现
public class maopao {
public static void main(String[] args) {
int[] a ={1,4,3,5,25,6,7,8};
sort(a);
System.out.println(Arrays.toString(a));
}
public static void sort(int[] a){
int last = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - i - 1 ; j++) {
int temp = 0;
if (a[j] > a[j+1]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
}
以上就是全部内容,如果有错误的地方请批评指正