冒泡排序算法,在扫描待排序记录序列时,顺序比较相邻的两个记录的关键字大小,如果是逆序,就交换位置,在传统的冒泡排序算法中,需要将外层循环执行n-1,每一次内层循环执行n-i次判断,在逆序的条件下执行数据的交换,但是若某一趟排序过程结束后,没有发现一个逆序,就可以直接结束整个排序过程,因此设置flag标志。
该排序算法的空间复杂度:需要一个辅助空间进行交换,为O(1)
稳定性:排序的结果并不会出现将统一值的索引交换位置,因此是一种稳定的排序算法。
注意的细节问题:内层循环的条件,以防止数组下标越界即可。
代码如下:
import java.util.Arrays; public class BubbleUpSort { public static void bubbleSort(int [] a){ //设置标志,并默认赋值true boolean flag = true; //定义变量用于交换逆序的数据 int temp = 0; for(int i =0;i<a.length-1&&flag;i++){ //进入内层循环置为false flag = false; for(int j =0;j<a.length-i-1;j++){ if(a[j]>a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1]= temp; //内层循环若为执行交换,证明该数据依旧是无序状态,需要下一趟的排序 flag = true; } } //若未进行数据的交换,证明该数组以为有序数组,flag为false,不会进入下面的循环中 //对于每一趟结果的打印 System.out.println(Arrays.toString(a)); } } public static void main(String[] args) { int[] a = {1,2,4,8,-8,6,8,-9}; bubbleSort(a); } }