今天我们来介绍冒泡排序的优化算法,对于冒泡排序,相信大家都不会陌生,就是说从最后一个开始挑选,越小的越往上面冒,一般来说这个算法的时间复杂度为O(n^2),但是我们原来不知道想过没有,如果这个序列本身就是很工整的按照一个从小到大的序列进行排序,如果我们依然按照冒泡排序,会显得有点愚钝,例如这个序列为3,2,1,5,9,10,这个序列中,我们只需要把3和1进行替换即可,可是如果使用冒泡的话,我们的替换就会有问题,则此时我们就可以加入一个标志,当如果这个冒泡的从后到前的一次排序时,如果没有经过替换的时候,就说明这个排序已经排序成功,则此时我们就不需要进行排序了
冒泡排序一般排法:
1 package BubbleArray; 2 3 public class BubbleArray1 { 4 5 public static void main(String[] args) { 6 int[] array = new int[]{1,34,16,8,96,17}; 7 bubbleSort(array); 8 display(array); 9 } 10 11 private static void display(int[] array) { 12 for (int i = 0; i < array.length; i++) { 13 System.out.println(array[i]); 14 } 15 } 16 17 public static void bubbleSort(int[] array) { 18 for (int i = 0; i < array.length -1; i++) { 19 for (int j = array.length - 1; j > i; j--) { 20 if(array[j] < array[j - 1]){ 21 int tmp = array[j]; 22 array[j] = array[j - 1]; 23 array[j - 1] = tmp; 24 } 25 } 26 } 27 } 28 29 }
优化后的代码,添加flag的标志
1 package cn.xx.test; 2 3 //冒泡 4 public class C { 5 6 public static void main(String[] args) { 7 int[] num = {5,47,21,56,32,3,1,4,1,2,5,3,33,5}; 8 sort(num); 9 display(num); 10 } 11 public static void sort(int[] num){ 12 int tmp; 13 boolean flag = true; 14 for (int i = 0; i < num.length - 1 && flag; i++) { 15 flag = false; 16 for (int j = num.length - 1; j > i ; j--) { 17 if(num[j] < num[j - 1]){ 18 tmp = num[j]; 19 num[j] = num[j - 1]; 20 num[j - 1] = tmp; 21 flag = true; 22 } 23 } 24 } 25 } 26 public static void display(int[] num){ 27 for (int i = 0; i < num.length; i++) { 28 System.out.println(num[i]); 29 } 30 } 31 }