冒泡排序的优化算法

今天我们来介绍冒泡排序的优化算法,对于冒泡排序,相信大家都不会陌生,就是说从最后一个开始挑选,越小的越往上面冒,一般来说这个算法的时间复杂度为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 }
原文地址:https://www.cnblogs.com/wnbahmbb/p/6471371.html