冒泡排序

154 阅读1分钟

对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前往后移动。如:

原始:3 9 -1 10 -2

第一次移动:

3 9 -1 10 -2
3 -1 9 10 -2
3 -1 9 10 -2
3 -1 9 -2 10

第二次移动:

-1 3 9 -2 10
-1 3 9 -2 10
-1 3 -2 9 10

第三次移动:

-1 3 -2 9 10
-1 -2 3 9 10

第四次移动:

-2 -1 3 9 10

规则:

  1. 一共进行(数组大小-1)次大循环
  2. 每一次大循环中的排序次数主键减少
  3. 若在某趟排序中,未发生交换,可提前结束,实现优化 代码:
public static void bubbleSort(int[] arr) {
	int temp = 0;//临时变量
    boolean flag = false;//标识变量,判断是否有过交换
    for (int i = 0; i < arr.length-1; i++) {
    	for (int j = 0; j < arr.length-1-i; j++) {
        	if (arr[j] > arr[j+1]) {
            	flag = true;
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        if (!flag) 
        {
        	break;//在一趟排序中未发生交换
        } 
        else 
        {
        	flag = true;//重置flag
        }
    }
    bubbleSort(arr);
    System.out.println(Arrays.toString(arr));
}