JAVA 数组 选择排序详解,逐步深入,选择核心思想(从头到尾比一遍)

public class Selectsorting {
    
//    void max(int array[]) {
//        int[] array = new int[3];
//        for (int i = 0; i < array.length; i++) {
//            //5 - 10
//            array[i] = (int)( (Math.random()* (100 - 10 + 1 )  ) + 10 );
//        }
//        System.out.println("排序前===========================");
//        for (int i : array) {
//            System.out.print("  "+i);
//        }
//        System.out.println("使用选择比较法找出最大值--------");
//        
//        //数组
//        int arrayLength = array.length;
//        int maxs = array[0];
//        int temp = 0;
//        for (int i = 1; i < arrayLength; i++) {
//            if(maxs < array[i]) {
//             temp  = array[i];
//             array[i] = maxs;
//             maxs = temp;
//            }    
//        }
//        System.out.println("选择找出最大值: "+ maxs);
//        
//    }
    
    


    public static void main(String[] args) {
        
        int[] array = new int[15];
        int arrayLength = array.length;
        //冒泡 相邻比较 
        //选择 第一个和每一个鲁一边
    
        for (int i = 0; i < array.length; i++) {
            //5 - 10
            array[i] = (int)( (Math.random()* (100 - 10 + 1 )  ) + 10 );
        }
        
        System.out.println("排序前 ----------------------------");
        for (int i : array) {
            System.out.print(" " +i );
        }
        
        
        /**
         * 
         * 选择排序 官方标配版
         * / 
//        int temp = 0;
//        for (int i = 0; i < array.length; i++) {
//            for (int j = 0; j < array.length; j++) {
//                if(array[i] > array[j]) {
//                    temp = array[i];
//                    array[i] = array[j];
//                    array[j] = temp;
//                }
//            }
//        }
        
        /**
         * 选择排序 旗舰版
         */
//        int tem = 0;
//        // arrayLength -1  外层循环arrayLength -1  次就可以得出结果 (考虑效率 也可以 不用   - 1 )
//        for(int i = 0; i < arrayLength - 1; i++) {
//            // int j = i + 1 因为内层循环需要递减,
//            //外层循环每循环一次,就得出一个最大值,
//            //内层循环就比外层循环减少一次 如果不考虑效率可以初始化 j = 0
//            for(int j = i + 1; j < arrayLength; j++) {
//                if(array[i] < array[j]) {
//                    tem = array[i];
//                    array[i] = array[j];
//                    array[j] = tem;
//                }  
//            }
//        }
        
        
        /**
         * 选择排序 豪华版
         * 
         * 以前每一次都是 操作下标进行交互,这一次我们就记住这个最大值的下标,让它循环完一轮在进行交换
         */
        
        int tem = 0;
        int p = 0;
    for (int i = 0; i < array.length - 1; i++) {
        
        //最大值下标
        int indexMax = i;
        //穿件白色马甲行来
        boolean flag = false;
        
        for (int j = i + 1; j < array.length; j++) {
            
            if(array[indexMax] > array[j]) {
                //有最大值 就 改标志
                indexMax = j;
                //百色马甲上写上   斩立决
                flag = true;
                p++;
            }        
        }
        
        if(flag == true) {
            //穿着 白色马甲上写有斩立决的  关如秋后处斩的牢房!
            tem = array[indexMax];
            array[indexMax] = array[i];
            array[i] = tem;
        }
    }
    

        
        

        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
        System.out.println("\r\n排序后===========================");
        for (int i : array) {
            System.out.print(" " +i );
        }
    }
}

掌握核心思想:你就能写出来,核心思想:从头到尾比较一遍,找出最大值(最小值)

posted @ 2018-04-29 09:57  马鞍山  阅读(290)  评论(0编辑  收藏  举报