01 算法-初识算法-冒泡排序

冒个泡

什么是冒泡排序?

冒泡排序的英文Bubble Sort,是一种最基础的交换排序

按照冒泡排序的思想,要把相邻的元素两两比较,根据大小来交换元素的位置,过程如下:

algorithm-Bubble-Sort-1.png
algorithm-Bubble-Sort-2.png
algorithm-Bubble-Sort-3.png

代码实现:

双层for循环

  • 外部循环控制所有的回合,内部循环代表每一轮的冒泡处理,先进行元素比较,再进行元素交换。
    分析性能:
    其实根据视图可以看出,我们在进行第六次循环的时候数组已经是一个有序数组了,但是代码依旧会执行完第七次和第八次;这种情况下,进行判断出数列是否已经有序,并且做出标记,剩下的几轮排序就可以不必执行,提早结束工作。
/**
 * @author maozhengwei
 * @version V1.0.0
 * @description
 * @data 2019-05-22 17:18
 * @see
 **/
public class BubbleSort {

    private static void sort(int array[]) {

        for( int i = 0; i < array.length; i++) {
            for(int j = 0; j < array.length - i - 1; j++) {
                if(array[j] > array[j + 1]) {
                    int tmp = array[j];
                    array[j] = array[j +1];
                    array[j +1] = tmp;
                }
            }
        }
    }

    public static void main( String [] args) {

        int[] array = new int[] { 5 , 8 , 6 , 3 ,  9 , 2 , 1 , 7 };
        sort(array);

        System.out.println(Arrays.toString(array));
    }
}

双层for循环 优化1

进行标志位标志本轮循环是否存在元素交换位置,如果没有交换则说明数据已经有序,则退出;

/**
 * @author maozhengwei
 * @version V1.0.0
 * @description
 * @data 2019-05-22 17:18
 * @see
 **/
public class BubbleSort2 {

    private static void sort(int array[]) {

        for( int i = 0; i < array.length; i++) {
            //进行循环标记,记录每一轮是否发生变化,存在则继续,如果不进行交互则停止
            boolean flag = false;
            for(int j = 0; j < array.length - i - 1; j++) {
                if(array[j] > array[j + 1]) {
                    //进行元素交换
                    flag = true;
                    int tmp = array[j];
                    array[j] = array[j +1];
                    array[j +1] = tmp;
                }
            }
            if (!flag) {
                break;
            }
        }
    }

    public static void main( String [] args) {
        int[] array = new int[] { 5 , 8 , 6 , 3 ,  9 , 2 , 1 , 7 };
        sort(array);
        System.out.println(Arrays.toString(array));
    }
}

你可能感兴趣的:(01 算法-初识算法-冒泡排序)