1. 冒泡排序的原理
冒泡排序的思想就是:假设有n个数据 循环n次 两两比较 例如 1 3 4 2 7
1与3 先比较 小的在前大的在后 是顺序 所以不需要变,
指针后移 3与4相比 不变指针后移
4与2相比 反序 交换位置 变为2 4 也就是数组序列变为 1 3 2 4 7
指针后移 4与7比 正序 不变
这就是第一次排序 找到了最大的值放在最后
接下来还是这么比较 就找到了第二大的 放在倒数第二的位置 以此类推
如图:
2.代码如下
package com.study;
public class Sort {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
Sort.mp(a);
for (int arry:a) {
System.out.println(arry);
}
}
//冒泡
public static void mp(int[] a){
for (int i = 0;i < a.length-1;i++){
for (int j = 1;j < a.length;j++){
if(a[j-1] > a[j]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}
}
3. 相关知识
- 时间复杂度时候O(n^2)
- 冒泡排序是稳定的排序算法
所谓稳定 就是假设序列 12234 有相等的值2 经过排序后 a[1] 的2还是原来a[1]的2 不与a[2]的2 交换位置 - 空间复杂度是O(1)
- 冒泡排序是交换排序
4.优化
上述序列如果是有序的 但是冒泡排序还需要比较n遍,改进思路 设置一个变量 如果在一次比较过程中 没有发生位置的改变 说明序列有序 退出循环