算法之排序

我用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+"\t");
        }
        System.out.println("_------分割线------—_");
        for(int num:sort1){
            System.out.print(num+"\t");
        }
    }
    //冒泡排序
    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;

    }
}

~~
posted @ 2021-07-31 21:28  索匣  阅读(27)  评论(0编辑  收藏  举报