美文网首页
01 算法-初识算法-冒泡排序

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

作者: 花神子 | 来源:发表于2019-05-22 19:10 被阅读0次

    冒个泡

    什么是冒泡排序?

    冒泡排序的英文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 算法-初识算法-冒泡排序

          本文链接:https://www.haomeiwen.com/subject/wjcpzqtx.html