JAVA版冒泡排序、冒泡排序核心思想、冒泡排序详解

import java.util.Arrays;

public class Bubblesorting {
    public static void main(String [] args) {
        int[] array = { 67, 48, 1, 24, 33, 99, 89, 100 ,3 ,71 ,12 ,50 ,20, 9 }; 
        System.out.println("排序前:\r\n"+ Arrays.toString(array));
        
        //冒泡排序
//        bublesorting(array);

//        bublesortPlus(array);
         bubbleSortint(array);
    }
    
    static void bublesorting(int[]  array){
    //冒泡排序 标配版
        
        int temp = 0;
        for (int i = 0; i < array.length; i++) {
            //array.length - 1 不减去1  array[j+1 ] 数组越界
            for (int j = 0; j < array.length - 1; j++) {
                if(array[j] > array[j+1]) {
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        System.out.println("排序后..............标准");
        System.out.println(Arrays.toString(array));
    }
    
    
    /**
     * 冒泡旗舰版
     */
    static void bublesortPlus(int[] array) {
        int temp = 0;
        int p = 0;
        
        /**
         * 1.1 array.length -1 比较数组长度 - 1 次即可得出结果
         */
        for (int i = 0; i < array.length -1; i++) {
                
            /**
             * 1. array.length -1 - i 的原因: 数组越界 - i 外层循环每循环一次
             *   ,就把最大数移动大 数组第一个或者是最后一位置 ,
             *   内层 循环就 需要递减
             */
            for (int j = 1; j < array.length -1 - i ; j++) {
                if(array[j] > array[j+1]) {
                    temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;                
                    p++;

                }
            }
        }
        System.out.println("排序后..............旗舰"+" " + p + "次");
        System.out.println(Arrays.toString(array));
        
    }
    
    /**
     * 冒泡豪华版
     */
    
    static void bubbleSortint(int[] array) {
        int temp = 0;
        int c = 0;
        for (int i = 0; i < array.length -1; i++) {
            boolean flag = false;
            for (int j = 0; j < array.length -1 - i; j++) {
                if(array[j] > array[j+1]) {
                    flag = true;
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    c++;                            
                }
                if(flag == false) {
                    break;
                }
            }
        }
        System.out.println("排序后..............豪华"+" " + c + "次");
        System.out.println(Arrays.toString(array));
    }
    
 
}

冒泡核心思想:相邻元素进行比较(array[i]  和 array[ i + 1 ]),循环一次出来一个最大值(最小值)

posted @ 2018-04-29 10:03  马鞍山  阅读(752)  评论(0编辑  收藏  举报