zoukankan      html  css  js  c++  java
  • 算法之排序

    我用python实现的冒泡排序是双指针,这里虽然也是双指针,但是flag == 0,可以退出循环我不理解
    选择排序python用的是技巧min()函数和切片
    java么求初每一次循环索引的最小值(这里的技巧很厉害),然后再覆盖赋值

    public class suanfa {
        public static void main(String[] args) { //直接写main编译器就自动帮你加上了
            suanfa bubble = new suanfa(); //把这整个类赋值给sort变量
            //java赋值给变量一般数据类型时候都要加数据类型,指定大小空间;除了上方的类等赋值,方法赋值也要
            int[] array = {2,5,1,6,4,9,8,5,3,1,2,0};
            int[] arr = {2,5,1,6,4,9,8,5,3,1,2,0};
            int[] sort = bubble.sort(array);//类调用类中的方法
            int[] sort1 = bubble.select(arr);//选择排序
            for(int num:sort){
                System.out.print(num+"	");
            }
            System.out.println("_------分割线------—_");
            for(int num:sort1){
                System.out.print(num+"	");
            }
        }
        //冒泡排序
        public int[] sort(int[] array){
        int temp = 0;
        // 外层循环,他决定一共走几趟
        //-1为了防止溢出
        for(int i = 0;i<array.length-1;i++){
            int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
            // 内层循环,他决定每趟走一次
            for(int j =0;j<array.length-i-1;j++){
                //如果后一个大于前一个,则换位
                if(array[j+1]>array[j]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag=1;
                }
            }
            //为什么flag == 0,可以退出循环
            if(flag==0){
    
                break;
            }
        }
        return array;
        }
    
        //选择排序
        public int[] select(int arr[]){ //arr也可以等价于array
            int temp = 0;
            for(int i = 0;i<arr.length-1;i++){
                //不必python中的range(len(arr)),他不取最后一项,
                //java这里要标记清楚
    
                // 认为目前的数就是最小的,记录最小数的下标
                int minIndix = i;
                for(int j=i+1;j<arr.length;j++){
                    if(arr[minIndix]>arr[j]){// 修改最小值的下标
                        minIndix = j;
                    }
                }
                // 当退出for就找到这次的最小值,就需要交换位置了
                if(i!=minIndix){ //交换当前值和找到最小值的位置
                    temp = arr[i];
                    arr[i] = arr[minIndix];
                    arr[minIndix] = temp;
                }
            }
            return arr;
    
        }
    }
    
    ~~
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    UVa OJ 102 Ecological Bin Packing (生态学装箱问题)
    最小生成树 zoj1586 QS Network
    最小生成树&并查集 POJ 1861 Network
    最小生成树&并查集POJ 1287 Networking
    2012年亚洲长春区域赛:K Yukari's Birthday
    最小生成树 ZOJ 1203 Swordfish
    HDU 2639 Bone Collector II
    POJ2528 Mayor's posters(区间替换&&线段切割)
    POJ2777 Count Color(区间修改&&懒惰标记&&位运算)
    (转)有关如何入门ACM
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15085316.html
Copyright © 2011-2022 走看看