二分法;冒泡排序(自定义排序规则)

一:升序方法

  Integer[] array = {1,2,5,7,20,100,30,9,15,14};
        //升序方法
//        Arrays.sort(array);
//        System.out.println(Arrays.toString(array));

二:自定义排序规则

 //使用Comparator(比较器)自定义排序规则
        Arrays.sort(array, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//左边大于右边,返回正数,升序
//                return -(o1-o2);//降序
            }
        });

三:冒泡排序

每次从数组中找出最大值放在数组的后面去。

实现冒泡排序的步骤

  • 确定一共需要做几轮:数组长度-1.
  • 每轮换位
  • public class Maopao {
        public static void main(String[] args) {
            int[] arr = {9,5,2,7,1,12,36};
             /**
             *第一轮比较:i=0 , j=6
             *    第一次:  [5, 9, 2, 7, 1, 12, 3]
             *    第二次比较:[5, 2, 9, 7, 1, 12, 3]
             *    第三次比较:[5, 2, 7, 9, 1, 12, 3]
             *    第四次比较:[5, 2, 7, 1, 9, 12, 3]
             *    第五次比较:[5, 2, 7, 1, 9, 12, 3]
             *    第六次比较:[5, 2, 7, 1, 9, 3, 12]
             *    第一个for循环:
             *          每一轮只比较位置为j的数字。
             *    第二个for循环:
             *           位置为j的数字每次和后面的数字比,比后面大则换位,
             *           小则不换,继续下一次比较,下一次的位置为j的数字继续与后面的一位比较。
             *           比较到循环结束时停止。开始下一轮的比较
    
    
            //冒泡排序
            for (int i =0;i<arr.length-1;i++){//比较的轮次
    
                for (int j = 0;j<arr.length-1-i;j++){//每比较一次,换位的次数
                    if (arr[j]>arr[j+1]){
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }

    结果为:[1, 2, 5, 7, 9, 12, 36]

四:二分法

        二分查找前提是必须排序好的数据。

        

public class erfenfa {

    public static void main(String[] args) {
        int[] array = {1, 2, 5, 7, 20, 100, 30, 9, 15, 14};
        int row = erfenfa(array, 20);
        System.out.println(row);

    }

    /**
     * 二分法查找
     *
     * @author asus
     * @date 2022/6/16
     */
    public static int erfenfa(int[] array, int findNum) {
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
        //定义左边和右边
        int left = 0;
        int middle = 0;
        int right = array.length - 1;

        while (left <= right) {
            middle = (left + right) / 2;
            if (findNum > array[middle]) {
                left = middle + 1;
            } else if (findNum < array[middle]) {
                right = middle - 1;
            } else {
                return middle;
            }
        }
        return -1;
    }

}

结果为:[1, 2, 5, 7, 9, 14, 15, 20, 30, 100]
               7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值