具体流程如下:
1、对要排序的数组中的数据,依次比较相邻的两个数据的大小。
2、如果前面的数据大于后面的数据,就把这两个数据进行交换。这样一轮比较和交换过后,就把最小的数据放在数组的最前面;
3、按照上述比较和交换的方法,把剩下的数据再进行相同操作,最后,便可按照从小到大的顺序对数组完成排序。
假如有初始数据:25 11 45 26 12 78。
1、第一轮排序,从数组的头部开始进行比较。首先是 25 和 11 比较,25 大,将数据 11 向前移一位。同理,比较 25 和 45, 后一个即 45 大,位置不动。再比较45 和 26,前一个数大,所以 45 后移一位。第一轮排序后,顺序为:[11, 25, 26, 12, 45, 78]。
2、第二轮排序,从数组的头部开始进行比较。首先是 11 和 25 比较,由于前面的数小,所以位置不动。比较25 和 26 ,由于前面的数小,所以位置不动。第二轮排序后,顺序为:[11, 25, 12, 26, 45, 78]。
3、第三轮排序,从数组的头部开始进行比较。首先是 11 和 25 比较,由于前面的数小,所以位置不动。比较 25 和 12,由于前面的数大,所以位置互换。第三轮排序后,顺序为:[11, 12, 25, 26, 45, 78]。
......
4、最后一轮排序后,顺序为:[11, 12, 25, 26, 45, 78]
稳定排序,平均时间复杂度O(n2),最好时间复杂度O(n),空间复杂度O(1)。
public int[] sort(int[] arr) { int tmp; boolean flag; for(int i = 1; i < arr.length; i++) { // 判断相邻两个数据的大小,并把较大的数往后冒泡 flag=false; for(int j = 0; j < arr.length - 1; j++) { if(arr[j] > arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag=true; } } if(flag==false) break; } return arr; }